workerman 工作流程,如進(jìn)程,子進(jìn)程,socket等關(guān)系,workerman是如何運(yùn)作的?
workerman有兩種進(jìn)程模型
1、基本的master worker模型
2、master gateway worker模型
master worker模型工作流程及進(jìn)程間關(guān)系如下:
master worker模型說(shuō)明:
master進(jìn)程為主進(jìn)程,啟動(dòng)過(guò)程中讀取conf配置,根據(jù)每個(gè)應(yīng)用配置中的ip和端口創(chuàng)建監(jiān)聽(tīng)socket,然后再根據(jù)配置中的進(jìn)程數(shù)創(chuàng)建對(duì)應(yīng)數(shù)量的子進(jìn)程即worker進(jìn)程,worker進(jìn)程會(huì)自動(dòng)繼承master進(jìn)程創(chuàng)建的監(jiān)聽(tīng)socket,使得worker進(jìn)程能夠獨(dú)立的接受并處理客戶(hù)端的連接。而后master進(jìn)程進(jìn)入監(jiān)聽(tīng)信號(hào)的邏輯中,監(jiān)聽(tīng)worker進(jìn)程退出信號(hào)(worker進(jìn)程退出后,系統(tǒng)會(huì)自動(dòng)向master進(jìn)程發(fā)送一個(gè)SIGHCLD信號(hào),mater進(jìn)程會(huì)重新創(chuàng)建子進(jìn)程,將缺失的子進(jìn)程補(bǔ)上),master進(jìn)程還會(huì)監(jiān)聽(tīng)workermand腳本發(fā)來(lái)的停止信號(hào)(SIGINT)和平滑重啟服務(wù)信號(hào)(SIGHUP)
worker進(jìn)程為master進(jìn)程派生出來(lái)的子進(jìn)程,自動(dòng)繼承了master進(jìn)程的監(jiān)聽(tīng)socket,每個(gè)worker進(jìn)程獨(dú)立的接受并處理客戶(hù)端的連接。
master worker模型比較適合業(yè)務(wù)簡(jiǎn)單的應(yīng)用或者短連接應(yīng)用
master gateway worker模型工作流程和進(jìn)程間關(guān)系如下:
master gateway worker 模型說(shuō)明:
這種模型多了一個(gè)gateway進(jìn)程組,工作流程與master worker模型基本相同,區(qū)別是worker進(jìn)程不再直接與客戶(hù)端打交道,客戶(hù)端與worker進(jìn)程之間多了一個(gè)gateway進(jìn)程,gateway專(zhuān)職處理網(wǎng)絡(luò)IO,并維護(hù)客戶(hù)端的長(zhǎng)連接。
master gateway worker 模型非常適合長(zhǎng)連接應(yīng)用
這里有一個(gè)之前寫(xiě)的一個(gè)關(guān)于server模型及php實(shí)現(xiàn)的的ppt,發(fā)給大家參考下(僅供參考)
http://wtbis.cn/upload/answer/20140815/php_process_model.pdf
大大,請(qǐng)教一下,上面兩張圖中寫(xiě)的進(jìn)程間通信(消息隊(duì)列,共享內(nèi)存),可我在workerman的源碼中找不到相關(guān)的PHP函數(shù)如msg_xxx,sem_xxx等,難道不是用PHP的內(nèi)置函數(shù)實(shí)現(xiàn)的嗎