[英]App crashes when it takes too long to reply in a ZMQ REQ/REP pattern
[英]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
) connect
和bind
bind
后send
編輯:當我使用tcp時,它也可以正常工作。
似乎這樣仍然是inproc的限制。 ZMQ指南說,對於inproc套接字,必須在connect
之前調用bind
。 此限制在版本4.0.0中已修復,但顯然不適用於REQ套接字。
inproc
傳輸類的傳輸特定步驟 連接一個inproc
插座
當使用帶有inproc
傳輸的zmq_connect()
將套接字連接到對等地址 (*)時, 端點應解釋為(*) 任意字符串,標識要連接的< name > 。
< name > 必須事先 通過將其分配 給與所連接套接字相同的 ØMQ上下文中的至少一個套接字來創建 。
在代碼段和requestSocket
實例之前使用inproc://test
< name >創建另一個“特技”套接字,該套接字現在是同一ZMQ_Context內“第二個”套接字,應按照規范和您的期望。
檢測+處理錯誤狀態並按原則處理'em'絕對不是一個壞習慣-無論是在模型代碼中還是在生產代碼中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.