国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

swoole_process父子進程管道通信的代碼示例

2024-05-04 21:50:55
字體:
來源:轉載
供稿:網友

本篇文章給大家帶來的內容是關于swoole_process父子進程管道通信的代碼示例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

話不多說直接上代碼

創建的子進程:

  1. public function __construct() 
  2.  
  3.     { 
  4.  
  5.         $this->redis   = Container::get(SwooleRedis::class);//獲取異步redis獲取更高性能 
  6.  
  7.         $this->process = new swoole_process(function (swoole_process $process) { 
  8.  
  9.             return $this->process($process); 
  10.  
  11.         }, false, SOCK_DGRAM); 
  12.  
  13.         $this->process->name('Test_Gateway'); 
  14.  
  15.         $this->process->useQueue(); 
  16.  
  17.         $this->process->start();//啟動子進程 
  18.  
  19.     } 
  20.  
  21.       
  22.  
  23.     /** 
  24.  
  25.      * 子進程處理邏輯 
  26.  
  27.      * @param swoole_process $process 
  28.  
  29.      */ 
  30.  
  31.     private function process(swoole_process $process
  32.  
  33.     { 
  34.  
  35.         $client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC); //異步非阻塞 
  36.  
  37.           
  38.  
  39.         $client->on("connect"function (swoole_client $cliuse ($process) { 
  40.  
  41.             $process->write('connected'); 
  42.  
  43.         }); 
  44.  
  45.           
  46.  
  47.         $client->on("receive"function (swoole_client $cli$datause ($process) { 
  48.  
  49.             $process->write($data); 
  50.  
  51.         }); 
  52.  
  53.           
  54.  
  55.         $client->on("error"function (swoole_client $cliuse ($process) { 
  56.  
  57.             $process->write('error'); 
  58.  
  59.         }); 
  60.  
  61.           
  62.  
  63.         $client->on("close"function (swoole_client $cliuse ($process) { 
  64.  
  65.             $process->write('close'); 
  66.  
  67.         }); 
  68.  
  69.           
  70.  
  71.         if ($client->connect('127.0.0.1', 90, -1)) { 
  72.  
  73.           
  74.  
  75.         } else { 
  76.  
  77.             $process->write('網關連接失敗'); 
  78.  
  79.         } 
  80.  
  81.           
  82.  
  83.         swoole_event_add($process->pipe, 
  84.  
  85.             function ($pipeuse ($process$client) {//讀取父進程管道消息 
  86.  
  87.                 $client->send($process->read()); 
  88.  
  89.             }); 
  90.  
  91.     } 

父進程onWorkerStart:

  1. /** 
  2.  
  3.      * @param swoole_server $serv 
  4.  
  5.      * @param               $worker_id 
  6.  
  7.      */ 
  8.  
  9.     public function onWorkerStart(/swoole_server $serv$worker_id
  10.  
  11.     { 
  12.  
  13.         if ($worker_id === 0) { 
  14.  
  15.             swoole_timer_tick(1000, function () { 
  16.  
  17.                 $this->process->write('ping'); 
  18.  
  19.             }); 
  20.  
  21.             $process = $this->process; 
  22.  
  23.             swoole_event_add($process->pipe, 
  24.  
  25.                 function ($pipeuse ($process) {//獲取子進程的管道消息 
  26.  
  27.                     echo "子進程消息:" . $process->read() . PHP_EOL; 
  28.  
  29.                 }); 
  30.  
  31.         } 
  32.  
  33.     } 

子進程的client客戶端可以忽略不計,本demo只是掩飾管道通信的例子

使用管道就不可以使用消息隊列:$process_push()和$process->pop();

理論上在父子進程各注冊一個event_loop即可實現一邊發消息一邊接收

其他的后續補充

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汕尾市| 台江县| 博野县| 灵武市| 松原市| 治县。| 黄山市| 聊城市| 广河县| 舞钢市| 琼海市| 喀喇| 武鸣县| 固镇县| 独山县| 定兴县| 普洱| 长岛县| 铜川市| 乌鲁木齐市| 石泉县| 北碚区| 富蕴县| 杂多县| 武定县| 特克斯县| 汉源县| 揭西县| 洪洞县| 北安市| 贵阳市| 鄢陵县| 西平县| 定安县| 辛集市| 慈利县| 古蔺县| 五河县| 冕宁县| 平利县| 巴东县|