[PHP]swoole_server進程的分工
摘要:Swoole是一個PHP語言的高效能網路通訊框架,提供了PHP語言的非同步多執行緒伺服器,非同步TCP/UDP網路用戶端,異步MySQL,資料庫連線池,AsyncTask,訊息佇列,毫秒定時器,非同步文件讀寫,非同步DNS查詢。強大的功能,由背後若干個分工明確的進程來實現,這裡詳細介紹下幾個進程的分工,以便入門者更快速的理解Swoole框架。
<span>$serv = new swoole_server("127.0.0.1", 9501);</span><span>$serv->set(array(</span><span> 'worker_num' => 8, //工作进程数量</span><span> 'daemonize' => true, //是否作为守护进程</span><span>));</span><span>$serv->on('connect', function ($serv, $fd){</span><span> echo "Client:Connect.\n";</span><span>});</span><span>$serv->on('receive', function ($serv, $fd, $from_id, $data) {</span><span> $serv->send($fd, 'Swoole: '.$data);</span><span> $serv->close($fd);</span><span>});</span><span>$serv->on('close', function ($serv, $fd) {</span><span> echo "Client: Close.\n";</span><span>});</span><span>$serv->start();</span>
<span>$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);</span><span>//设置事件回调函数</span><span>$client->on("connect", function($cli) {</span><span> $cli->send("hello world\n");</span><span>});</span><span>$client->on("receive", function($cli, $data){</span><span> echo "Received: ".$data."\n";</span><span>});</span><span>$client->on("error", function($cli){</span><span> echo "Connect failed\n";</span><span>});</span><span>$client->on("close", function($cli){</span><span> echo "Connection close\n";</span><span>});</span><span>//发起网络连接</span><span>$client->connect('127.0.0.1', 9501, 0.5);</span>
主要流程分析
Master流程
Master流程主要用來確保Swoole框架機制的運作。它會創建幾個功能性的線程:
Reactor線程:就是真正處理TCP連接,收發資料的線程。 swoole的主線程在Accept新的連線後,會將這個連線分配給一個固定的Reactor線程,並由這個線程負責監聽此socket。在socket可讀時讀取數據,並進行協定解析,將請求投遞到Worker進程。在socket可寫入時將資料傳送給TCP客戶端。 Master執行緒(主執行緒): 負責:Accept新的連線、UNIX PROXI訊號處理、定時器任務。 心跳套件偵測執行緒:(略)UDP收包執行緒:(略)Manager進程
swoole中Worker/Task進程都是由Manager進程Fork並管理的。
子程序結束運行時,manager進程負責回收此子進程,避免成為殭屍進程。並建立新的子程序伺服器關閉時,manager進程會發送訊號給所有子程序,通知子程序關閉服務伺服器reload時,manager程序會逐一關閉/重啟子程序模式,也可以是同步阻塞模式
接受由Worker進程通過swoole_server->task/taskwait方法投遞的任務
處理任務,並將結果資料傳回給Worker進程
以同步進程方式運行Master進程內的回呼函數<span>onStart</span><span>onShutdown</span><span>onMasterConnect</span><span>onMasterClose</span><span>onTimer</span>登入後複製
Worker進程內的回呼函數
<span>onWorkerStart</span><span>onWorkerStop</span><span>onConnect</span><span>onClose</span><span>onReceive</span><span>onTimer</span><span>onFinish</span>
<span>onTask</span><span>onWorkerStart</span>
以上就介紹了[PHP]swoole_server幾個進程的分工,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。