国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

workerman是否有請求超時時間的概念?

chaz6chez

使用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í)行時長超過某個時間定義就自動退出子進程?

5343 2 5
2個回答

法師

手冊里好像沒看到有關(guān)設(shè)置workerman超時的東西,估計是沒有的

  • chaz6chez 2019-01-10

    額,每個連接建立的時候創(chuàng)建一個定時器,然后連接斷掉的時候銷毀這個定時器,定時器到時的時候,主動把進程退出。
    我是這么做的,但是感覺這樣加重了消耗。
    另外grpc的問題是因為grpc的客戶端要在fork之前建立好,之后的話,就會再startBatch中無限等待。

  • chaz6chez 2019-01-10

    說錯了,是fork之后建立好

walkor 打賞

不要在workerman里fork進程,workerman不支持業(yè)務(wù)fork進程

  • chaz6chez 2019-01-10

    我的意思是workerman自身做了fork的操作,生成了多個進程,grpc的拓展不支持再fork之后做連接,所以得workerman主流程內(nèi)做好grpc的鏈接

  • chaz6chez 2019-01-10

    也就是在入口腳本的Worker::runAll();之前做好對grpc的客戶端連接,保存在靜態(tài)容器里面,之后再做調(diào)用就好了

  • walkor 2019-01-10

    這樣workerman就控制不到你的進程了,可能會有副作用,比如進程僵死之類的

  • chaz6chez 2019-01-10

    @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)驗?

  • walkor 2019-01-10

    沒用過grpc

  • chaz6chez 2019-01-10

    找到問題了,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

  • 法師 2019-01-15

    學(xué)習(xí)了

  • jasonyqwang 2021-03-31

    @4967:

  • chaz6chez 2021-10-23

    統(tǒng)一回復(fù),grpc在之后修復(fù)了這個問題,可以與workerman共存了

年代過于久遠,無法發(fā)表回答
??