巅云智能建站平台搭建版(创业流派版)火爆上线,毕生受权!新增:文章智能收罗+全站真静态打包+都会分站+智能小法式+不法词过滤+H5自顺应+智能链词等功效功效概况
赞助文档Help

详解PHP swoole process的操纵体例

一佰互联网站建造(www.taishanly.com) 宣布日期 2020-04-25 14:41:29 阅读数: 141

引入背景:假设咱们天天有10000个定单天生,须要同步到仓储体系中去,之前做法是开启一个crontab去跑这些使命,可是发明总有感受同步效力低,距离时候都是分钟级别的。

处置计划测试:咱们将同步定单的使命表增加一个hash作为key,作为散发前提,由于mysql中select若是做mod函数是用不到索引的,以是咱们本身做随机hash,可是务必不须要规模太大,以避免办事器资本不够,体例是按照hashkey投放到差别的历程中停止同步,测试代码以下

<?php
/**
 * Created by PhpStorm.
 * User: xujun
 * Date: 2017/8/26
 * Time: 9:37
 */
//假设须要处置的数据以下
class Process{
  public $mpid=0;
  public $max_precess=5;
  //取代从数据库中读取的内容
  public $task = [
    ["uid"=>1,"uname"=>"bot","hash"=>1,"handle"=>"test"],
    ["uid"=>2,"uname"=>"bot1","hash"=>2,"handle"=>"test"],
    ["uid"=>3,"uname"=>"bot2","hash"=>3,"handle"=>"test"],
    ["uid"=>4,"uname"=>"bot3","hash"=>4,"handle"=>"test"],
    ["uid"=>2,"uname"=>"bot4","hash"=>2,"handle"=>"test"],
    ["uid"=>3,"uname"=>"bot5","hash"=>3,"handle"=>"test"],
    ["uid"=>4,"uname"=>"bot6","hash"=>1,"handle"=>"test"],
  ];
  public $works = [];
  public $swoole_table = NULL;
  //public $new_index=0;
  function test($index,$task){
    print_r("[".date("Y-m-d H:i:s")."]"."work-index:".$index."处置".$task["uname"]."完成".PHP_EOL);
  }

  public function __construct(){
    try {
      $this->swoole_table = new swoole_table(1024);
      $this->swoole_table->column("index", swoole_table::TYPE_INT);//用于父子历程间数据互换
      $this->swoole_table->create();

      swoole_set_process_name(sprintf("php-ps:%s", "master"));
      $this->mpid = posix_getpid();
      $this->run();
      $this->processWait();
    }catch (Exception $e){
      die("ALL ERROR: ".$e->getMessage());
    }
  }

  public function run(){
    for ($i=0; $i < $this->max_precess; $i++) {
      $this->CreateProcess();
    }
  }

  private function getTask($index){
    $_return = [];
    foreach ($this->task as $v){
      if($v["hash"]==$index){
        $_return[] = $v;
      }
    }
    return $_return;
  }

  public function CreateProcess($index=null){
    if(is_null($index)){//若是不指定了索引,新建的子历程,开启计数
      $index=$this->swoole_table->get("index");
      if($index === false){
        $index = 0;
      }else{
        $index = $index["index"]+1;
      }
      print_r($index);
    }
    $this->swoole_table->set("index",array("index"=>$index));
    $process = new swoole_process(function(swoole_process $worker)use($index){

      swoole_set_process_name(sprintf("php-ps:%s",$index));
      $task = $this->getTask($index);
      foreach ($task as $v){
        call_user_func_array(array($this,$v["handle"]),array($index,$v));
      }
      sleep(20);
    }, false, false);
    $pid=$process->start();

    $this->works[$index]=$pid;
    return $pid;
  }

  public function rebootProcess($ret){
    $pid=$ret["pid"];
    $index=array_search($pid, $this->works);
    if($index!==false){
      $index=intval($index);
      $new_pid=$this->CreateProcess($index);
      echo "rebootProcess: {$index}={$new_pid} Done
";
      return;
    }
    throw new Exception("rebootProcess Error: no pid");
  }

  public function processWait(){
    while(1) {
      if(count($this->works)){
        $ret = swoole_process::wait();
        if ($ret) {
          $this->rebootProcess($ret);
        }
      }else{
        break;
      }
    }
  }

}
$process = new Process();

这里代码中,操纵了swoole_table作为历程间同享的内存,为了分派index。和当历程加入后,父历程经由进程wait从头拉起该历程使命。

测试截图

历程ps

成果 休眠20s后加入后会被主动拉起

以上便是本文的全数内容,但愿对大师的进修有所赞助,也但愿大师多多撑持网页设想。

TAG标签: 详解PHP   swoole   process的操纵体例  
一佰互联是天下着名建站品牌办事商,咱们有九年、网站建造、网页设想、php开辟和域名注册及假造主机办事经历,供给的办事更是天下着名。最近几年来还整合团队上风自立开辟了可视化多用户”“3.0平台版,拖拽排版网站建造设想,轻松完成pc站、手机微网站、小法式、APP一体化全网营销网站扶植 ,已胜利的为天下上百家收集公司供给自助建站平台搭建办事。

相干动静more

27
11月
建网站结果不好是栽在哪些题目上

要让网站起到抱负结果,那末企业不但须要在后期停止宣扬推行,在后期要将网站建好。良多身分,企业在网站上线后看不到以为中的结果,就会感觉网站不... >>概况

07
04月
Airbnb前端工程师:若何在设想中挑选准确

作为一位设想师,你须要学到的最首要的手艺之一便是若何挑选字体。这是由于笔墨内容是设想师与用户相同的首要体例之一,版式能够决议设想的成败。排版... >>概况

28
04月
Thinkphp挪用Image类天生缩略图的

本文实例报告了Thinkphp挪用Image类天生缩略图的体例。分享给大师供大师参考。具体阐发以下:Thinkphp的Image类 在Thi... >>概况

03
05月
网站优化SEO道理和网站推行体例

一、搜刮引擎的搜刮进程1、抓取网页:每一个自力的搜刮引擎都有本身的网页抓取法式(spider,即凡是所说的“蜘蛛”法式... >>概况

高端网站扶植

美工统筹SEO,为企业电子商务营销助力!

德律风:

023-85725751
建站

产物

域名注册 假造主机 云办事器 企业邮局
智能建站 APP打包 微站/小法式 创业平台
网站推行 媒体营销 智能收罗 AI机械人
400德律风 短信营销 店销机械人
私家定制 流派网站