我使用ZeroMQ的 REQ
/ REP
模式。
通常这种模式的工作方式如下:
REP.bind(localhost with a port)
REQ.connect(localhost with the same port)
REQ sends a REQ-message to REP
REP sends a REP-message to REQ back
现在,我想删除最后一步。
意思是REP
没有发回任何内容,它只是接收来自REQ
的消息。
我知道还有另一种名为 PUB
/ SUB
的模式,但我只想使用 REQ
/ REP
即可。
这是我的代码:
// REQ
int main()
{
void *context = zmq_ctx_new();
void *requester = zmq_socket(context, ZMQ_REQ);
zmq_connect(requester, "tcp://localhost:5555");
const char * msgSent = "I'm agent";
zmq_send(requester, msgSent, strlen(msgSent), 0);
zmq_close(requester);
zmq_ctx_destroy(context);
system("pause");
return 0;
}
// REP
int main()
{
void *context = zmq_ctx_new();
void *responder = zmq_socket(context, ZMQ_REP);
zmq_bind(responder, "tcp://*:5555");
while (true) {
char buffer[50] = {'\0'};
cout << "receiving..." << endl;
zmq_recv(responder, buffer, 50, 0);
cout << buffer << endl << "end";
}
system("pause");
return 0;
}
我首先运行REP
,它会显示&#34;接收...&#34;在控制台上,这意味着它正在等待某些消息
我运行REQ
,向REQ
发送消息。
之后,REP
的控制台将显示&#34;我是代理商&#34;然后while
将继续。似乎zmq_recv
是非阻塞的。
我认为收到&#34;我是代理商后会停止&#34;但它没有。但如果我让REP将某些内容发回REQ
,一切都会好的。
WHY吗
必须REP
发回一些东西吗?
答案 0 :(得分:1)
但是,它无法提供你所要求的东西。如果有理由开发一种高度可扩展的正式沟通模式,模仿REQ
- 询问/ REP
- 回复,那么ZeroMQ架构背后有这个主要原因,为什么你试图得到除此之外的其他预期的行为只是必须失败。
REQ
- 询问并主要等待,直到REP
- 回复为REQ
- 读入对于正式的非规定的点对点行为,可以实施PAIR
/ PAIR
正式沟通模式,享受充分的自由。
我可以为你的进一步问题做些什么,可以指导你看到一个bigger picture on this subject更多参数,一个简单的信号平面/消息平面插图,以及一个必读书的直接链接,来自Pieter HINTJENS