使用workerman實現(xiàn)了一個多進程的web server,當(dāng)請求進來時,喚醒其中一個進程執(zhí)行業(yè)務(wù)邏輯,在與其他子系統(tǒng)通訊時(如grpc),由于暫時無法實現(xiàn)與grpc的超時斷線,很容易內(nèi)部就形成死進程,這時該子進程保持busy狀態(tài),并且無法退出也未有返回,workerman可否定義一個請求超時時長?比如該次請求的業(yè)務(wù)執(zhí)行時長超過某個時間定義就自動退出子進程?
不要在workerman里fork進程,workerman不支持業(yè)務(wù)fork進程
我的意思是workerman自身做了fork的操作,生成了多個進程,grpc的拓展不支持再fork之后做連接,所以得workerman主流程內(nèi)做好grpc的鏈接
@1:現(xiàn)在出現(xiàn)了一個問題就是我在業(yè)務(wù)中調(diào)用grpc拓展創(chuàng)建客戶端,然后執(zhí)行對應(yīng)服務(wù)的時候會死進程,但是在cli和fpm和windows下沒問題,我在懷疑是不是grpc拓展的內(nèi)部實現(xiàn)和workerman調(diào)用的某個拓展起了沖突,大佬有沒有使用grpc的經(jīng)驗?
找到問題了,workerman使用了pctnl_fork進程,而grpc拓展不支持任何的grpc連接創(chuàng)建在fork之前就創(chuàng)建,單grpc拓展在zend虛擬機啟動時就加載了,所以相比worker man的fork就領(lǐng)先了。可以在worker man onStartWork內(nèi)使用dl函數(shù)加載grpc拓展,使用dl函數(shù)前請在配置文件中將enable_dl修改為on。
任何一個使用fork達到多進程目的的程序與grpc交互都可以使用這個思路解決,grpc官方也計劃對fork兼容,只是暫時沒有實現(xiàn)。
https://github.com/grpc/grpc/issues/15334