2016-09-26 89 views
0

如果我發送請求(幀)B並接收響應,同時我已經在等待前一個請求(A)的響應,那麼B任務中接收到的響應實際上是A請求的響應:如何同步客戶端的發送幀和接收幀?

request A sent 
request B sent 
request B processed (quick) 
response B sent 
response B received (*) 
... 
request A processed (slow) 
response A sent 
response A received 

隨着天真匹配,我會得到點(*)匹配請求 - 響應B.

那麼如何將它們同步?即我想以響應A結束請求A,並且無論處理每個請求需要多長時間,都請求B響應B.記錄我使用經銷商路由器插座。

我在考慮創建池請求(Dictionary),任務完成令牌綁定到發送的每個請求。任務會在池中創建新插槽,發送請求並等待完成。在後臺,任務一直在運行 - 接收者 - 它只是接收響應,將每個響應放在適當的時隙中,並將給定的任務令牌設置爲完成。我在正確的軌道上,我錯了,還是已經在NetMQ中實施?

回答

0

如果您想要同步請求/響應通信,您可以使用REQ/REP套接字代替DEALER/ROUTER。

如果您需要異步通信,並且您需要匹配請求的響應,您可以在請求中發送一個唯一的請求ID,並在響應中返回此請求ID。

+0

嗯,我已經來回發送ID,但它是** my **數據,對嗎?即ZeroMQ不處理它們,對吧?所以我仍然需要提出一些算法來匹配這些ID。 – astrowalker

+1

這是正確的,你需要匹配請求的響應。 – rveerd

相關問題