2015-04-02 22 views
3

ZeroMQs Pub/Sub模式使服務器可以輕鬆回覆正確的客戶端。然而,如何處理無法在兩個步驟內解決的通信,即需要多個請求/應答對的協議,這並不那麼明顯。ZMQ:多個請求/回覆對

例如,考慮一種情況,其中客戶端是向服務器請求特定類型的新工作的服務器,服務器回覆工作參數,然後客戶端發送結果,服務器檢查這些結果,回覆他們是否正確。

顯然,我不能僅僅使用recv,send,recv,send,並假定第一個和第二個recv來自同一個客戶端。使用多個recv,send對而不必處理來自其他客戶端的消息的慣用方式是什麼?

+0

您需要爲每個客戶端實現一個狀態機,以跟蹤特定客戶端所處的狀態。 – 2015-04-02 21:19:23

回答

6

可以通過使用ZMQ_ROUTER套接字來創建多個請求/回覆對。我建議在客戶端使用ZMQ_REQ套接字進行雙向通信。

如果您希望多個客戶端訪問單個服務器,則可以在服務器上使用路由器套接字並請求客戶端上的套接字。

退房的ZMQ指南的部分對這種模式: http://zguide.zeromq.org/php:chapter3#The-Asynchronous-Client-Server-Pattern

所有客戶端將與除了他們在相同的模式,酒吧/替補服務器交互將全部點的單臺服務器路由器插槽。

另一方面,服務器將爲客戶端發送的每條消息接收三條消息。這些部分代表:

  • PART0 =連接的標識(它是哪個客戶端隨機數)
  • 第1部分空=幀
  • 第2部分的=消息ZMQ的數據。

參考: http://zguide.zeromq.org/php:chapter3#ROUTER-Broker-and-REQ-Workers

同一性可以使用客戶端訪問的單個端口上之間進行區分。以相同的順序重新包裝消息,並在路由器套接字上(使用不同的數據幀)進行響應,會自動將其路由到發送消息的客戶端。