本機用workman 做了服務端與客戶端,
客戶端起定時器去通知服務端與做業(yè)務處理,
我的業(yè)務處理是定時從表內(nèi)讀取機器人curl調(diào)用一系列的接口發(fā)送一些數(shù)據(jù)。
我想問下,我這種會導致阻塞嗎?
客戶端時間到了去通知服務端去處理。服務器業(yè)務處理時間比較長。等第二個通知到了可能第一個還沒處理完,這種情況也會導致阻塞貌似
有什么比較好的解決方案嗎?
workerman并沒有多線程的概念,是多進程模型,單進程內(nèi)調(diào)用curl請求會造成業(yè)務阻塞的,但是從多進程角度看這個可看做是并行運行的,如果任務特別繁忙,可以考慮使用:
http://doc.workerman.net/faq/async-task.html
1、關(guān)于curl部分:既然 curl 部分存在阻塞并且你無法忍受這部分阻塞,那么可以考慮非阻塞版的curl, 或者干脆就這部分阻塞代碼再抽出來放在另外一組獨立worker來處理,然后同樣可以考慮利用 AsyncTcpConnection 進行通信;
2、關(guān)于服務端部分:服務端已經(jīng)剝離出來的這部分已經(jīng)處于異步架構(gòu)模式,所以這點肯定沒問題,如果業(yè)務處理還是很慢,那么就得考慮多進程,甚至是分布式集群處理,讓機器處理的更快一些;
總之繁重的業(yè)務或者說存在阻塞地方,使用異步架構(gòu)肯定沒錯。
我現(xiàn)在就是把阻塞的代碼放到單獨的work服務端去處理,服務端開多進程去處理,但是還是會慢,麻煩看下這個。https://wenda.workerman.net/question/4791
我覺得阻塞和慢并不能簡單的等同,你原先的慢有一部分是因為curl的阻塞,采用異步架構(gòu)后,現(xiàn)在的慢應該說的是你業(yè)務本身處理的慢吧。