簡體   English   中英

REQ-Socket沒有連接的對等方時ZMQ消息丟失

[英]ZMQ message lost when REQ-Socket has no connected peer

我正在嘗試創建一個簡單的ZMQ REQ-Socket,它連接到REP-Socket然后發送請求。

http://rfc.zeromq.org/spec:28上的規范指出,REQ-Socket

發送時SHALL阻止,或者當沒有連接的對等時返回適當的錯誤

我嘗試使用以下代碼:

#include <zmq.hpp>
zmq::context_t context;
zmq::socket_t requestSocket(context, ZMQ_REQ);
requestSocket.connect("inproc://test");
requestSocket.send(0, 0);

send不會阻止並且不會引發錯誤。 之后創建REP-Socket時,它不會收到以下消息:

zmq::socket_t replySocket(context, ZMQ_REP);
replySocket.bind("inproc://test");
zmq::message_t message;
replySocket.recv(&message); //hangs

Missing-Message-Problem-Solver( http://zguide.zeromq.org/page:all#Missing-Message-Problem-Solver )說

循環發送和接收並檢查返回碼

send不會引發錯誤( zmq_send返回0)。 那么正確的方法是什么呢?

我正在使用ZMQ 4.0.3

備注:如果我

  • 使用其他套接字類型(例如ZMQ_PAIR
  • 或交換connectbind
  • bindsend

編輯:當我使用tcp時,它也可以正常工作。

似乎這樣仍然是inproc的限制。 ZMQ指南說,對於inproc套接字,必須在connect之前調用bind 此限制在版本4.0.0中已修復,但顯然不適用於REQ套接字。

I / O無線程inproc傳輸類的傳輸特定步驟

連接一個inproc插座

當使用帶有inproc傳輸的zmq_connect()將套接字連接到對等地址 (*)時, 端點應解釋為(*) 任意字符串,標識要連接的< name >

< name > 必須事先 通過將分配 給與所連接套接字相同的 ØMQ上下文中的至少一個套接字創建

在代碼段和requestSocket實例之前使用inproc://test < name >創建另一個“特技”套接字,該套接字現在是同一ZMQ_Context內“第二個”套接字,應按照規范和您的期望。


經驗法則

檢測+處理錯誤狀態並按原則處理'em'絕對不是一個壞習慣-無論是在模型代碼中還是在生產代碼中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM