這里的阻塞任務(wù)主要指io,看了官方文檔,walkor老大的意思是多設(shè)置點進程,但是感覺和協(xié)程比起來還是差點意思,又在問答里搜了很多,也有人說放在隊列用業(yè)務(wù)進程來執(zhí)行,但這樣會產(chǎn)生個問題,就是如何給客戶端通知呢?
鏈接進程肯定是將任務(wù)放在隊列(我用redis~)然后直接返回客戶端的,然后處理隊列中任務(wù)的進程如何給那個客戶端通知呢?我想了很久,想到的結(jié)果:
1、客戶端輪詢,效率也是很低的。。
2、客戶端和服務(wù)端新發(fā)起websocket或socket-io之類的新鏈接等待服務(wù)器返回結(jié)果,但如何實現(xiàn)和進程間通知任務(wù)結(jié)果呢?這樣的效率又如何呢?
謝謝各位大神來幫忙答疑解惑~
慢任務(wù)建議用消息隊列處理,然后利用webman/push給客戶端推送。
嗯,我的思路就是:
1、客戶端訪問webman服務(wù),webman服務(wù)生成一個任務(wù)key返回給客戶端,并放入redis;
2、客戶端用這個key長鏈接(使用websocket或sse)另一個workerman長鏈接進程,workerman把key傳給另外一些業(yè)務(wù)worker運行;
3、業(yè)務(wù)worker運行完畢后,通過tcp把結(jié)果傳給workerman長連接進程,然后workerman長連接進程再返回給客戶端,關(guān)閉鏈接;
不知這樣做對不對,或者老大有更好的方案嗎?謝謝~
如果不使用隊列,可以通過開一組新的http端口來處理慢業(yè)務(wù)
http://wtbis.cn/doc/webman/others/task.html#%E6%96%B0%E5%A2%9EHTTP%E7%AB%AF%E5%8F%A3