2013-04-29 61 views
2

我想使用ZeroMQ(http://zeromq.org/)在C++中實現服務器/客戶端交互。ZeroMQ模式查詢

我的要求是實現一個函數,如果客戶端向服務器發送請求,服務器應該發送多個數據片段(按順序)返回給客戶端。客戶端應該能夠重複發送請求與服務器在每個請求上回復多個數據片段。

ZeroMQ規定車型,如REQ清晰度,發佈 - 訂閱,推輓,但這並不支持我的要求,因爲:

1)詢價-REP模式總是希望回到消息即它被設計成發送的組合和接收

2)發佈 - 訂閱和推輓是單向

哪個ZeroMQ模式將滿足我的要求,也是這協議會更好TCP,PGM,EPGM等...!

謝謝

回答

0

完全異步的方法如下。

客戶端

使您的客戶端使用DEALER套接字。連接到你的服務器ROUTER。

當你發送一個請求,發送(k, v)其中k是唯一的(在此客戶端的情況下),請求密鑰和v是你在任何執行運行時的實際請求數據。

偵聽同一個DEALER套接字上的傳入消息。預計,看起來像一序列消息:

  • (k, START)
  • (k, (0, 10), A[0..9])
  • (k, (10, 8), A[10..17])
  • (k, (18, 2), A[18..19])
  • (k, END)

服務器端

使您的服務器使用ROUTER套接字。綁定它。

收聽形式爲[sender, (k, v)]的傳入消息。

發回看起來像一序列消息:

  • [sender, (k, START)]
  • [sender, (k, (0, 10), A[0..9])]
  • [sender, (k, (10, 8), A[10..17])]
  • [sender, (k, (18, 2), A[18..19])]
  • [sender, (k, END)]

我使用方括號來表示ZMQ多部分消息和圓括號來表示元組。

+0

謝謝@Timothy Shields,正如上面解釋的multipart可能是有用的,但我們可以實現它作爲兩種模式的組合來解決我的問題?例如req-rep和pub-sub或pub-sub和push-pull等。或任何其他已有的模式? – spidey 2013-04-30 05:56:15

+0

@spidey這是一個現有的模式。它是經銷商到路由器。服務器端的多部分消息不是我正在發明的 - 這就是ROUTER套接字的工作方式。 – 2013-04-30 14:42:18