本節講解幾個多程序的例項。
下面例子實現了簡單的多程序管理:
<?php
$pids = ; //儲存子程序pid
$max_process = 3;//最大程序數
$pid = pcntl_fork();
if($pid <0)elseif($pid > 0)else
$id = getmypid();
echo time()." master process, pid \n";
for($i=0; $i<$max_process;$i++)
//master程序等待子程序退出,必須是死迴圈
while(1)}}
}}/**
* 建立worker程序
*/function start_worker_process()elseif($pid > 0)else. run $rand s\n";
while(1)
}}
下面我們使用多程序實現乙個tcp伺服器,支援:
<?php
class tcpserverelseif($pid > 0) else
umask(0);
$id = getmypid();
echo time()." master process, pid \n";
//建立tcp server
$this->socket = stream_socket_server("tcp:", $errno, $errstr);
if(!$this->socket) exit("start server err: $errstr --- $errno");}}
public function run()
echo "waiting client...\n";
//master程序等待子程序退出,必須是死迴圈
while(1)}}
sleep(1);//讓出1s時間給cpu}}
/*** 建立worker程序,接受客戶端連線
*/private function start_worker_process()elseif($pid > 0)else
}private function acceptclient()
$pos = strpos($buffer, "\n"); //訊息結束符
if($pos === false)else
$recv = ''; //清空訊息,準備下一次接收}}
}}
function __destruct()
}$server = new tcpserver();
$server->onconnect = function($conn);
$server->onmessage = function($conn,$msg);
$server->onclose = function($conn);
$server->run();
執行:
$ php process_multi.server.php
1528734803 master process, pid 9110
waiting client...
此時服務端已經變成守護程序了。新開終端,我們使用ps命令檢視程序:
$ ps -ef | grep php
yjc 9110 1 0 00:33 ? 00:00:00 php process_multi.server.php
yjc 9111 9110 0 00:33 ? 00:00:00 php process_multi.server.php
yjc 9112 9110 0 00:33 ? 00:00:00 php process_multi.server.php
yjc 9113 9110 0 00:33 ? 00:00:00 php process_multi.server.php
yjc 9134 8589 0 00:35 pts/1 00:00:00 grep php
可以看到4個程序:1個主程序,3個子程序。使用kill命令結束子程序,主程序會重新拉起乙個新的子程序。
然後我們使用telnet測試連線:
$ telnet 127.0.0.1 9201
trying 127.0.0.1...
connected to 127.0.0.1.
escape character is '^]'.
conn success
hello server!
received hello server!
quit
received quit
connection closed by foreign host.
PHP 多程序系列筆記(三)
本節講解幾個多程序的例項。下面例子實現了簡單的多程序管理 pids 儲存子程序pid max process 3 最大程序數 pid pcntl fork if pid 0 elseif pid 0 else id getmypid echo time master process,pid n fo...
PHP多程序 4 內部多程序
說的都是只相容unix 伺服器的多程序,下面來講講在window 和 unix 都相容的多程序 這裡是泛指,下面的curl實際上是通過io復用實現的 通過擴充套件實現多執行緒的典型例子是curl,curl 支援多執行緒的抓取網頁的功能。這部分過於抽象,所以,我先給出乙個curl並行抓取多個網頁內容的...
PHP多程序 四 內部多程序
上面乙個系列的教程 用 socket 和 pcntl 實現乙個多程序伺服器 一 php多程序程式設計 一 php多程序程式設計 二 管道通訊 php多程序程式設計 三 多程序抓取網頁的演示 說的都是只相容unix 伺服器的多程序,下面來講講在window 和 unix 都相容的多程序 這裡是泛指,下...