【发布时间】:2017-06-19 12:34:24
【问题描述】:
我有 1 个主(使用 REQ)和 2 个从属(A、B)使用 REP。 master 向其中一个 slave 发送一个请求,并期待他的响应。
即使我在 ZMQ 信封中设置了地址,消息也被发送到了错误的从站。如何指定从机地址?我认为我在 master 中正确设置了它,但它无法正常工作并以循环方式发送来自 master 的请求。
master.cpp
#include "zhelpers.hpp"
#include <string>
int main (int argc, char *argv[])
{
zmq::context_t context(1);
zmq::socket_t requester(context, ZMQ_REQ);
requester.setsockopt(ZMQ_IDENTITY,"M");
requester.bind("tcp://*:5559");
for( int request = 0 ; request < 10 ; request++) {
std::string cmd;
std::cin>>cmd;
s_sendmore (requester, "B");
s_sendmore (requester, "");
s_send (requester, cmd);
s_dump(requester);
}
}
slaveA.cpp
#include "zhelpers.hpp"
int main (int argc, char *argv[])
{
zmq::context_t context(1);
zmq::socket_t responder(context, ZMQ_REQ);
responder.setsockopt(ZMQ_IDENTITY, "A", 1);
responder.connect("tcp://localhost:5559");
while(1)
{
s_dump(responder);
sleep (1);//
// s_sendmore (responder, "M"); //Should I set this ??
// s_sendmore (responder, "");
s_send (responder, "FromSlaveA");
}
}
slaveB.cpp
#include "zhelpers.hpp"
int main (int argc, char *argv[])
{
zmq::context_t context(1);
zmq::socket_t responder(context, ZMQ_REP);
responder.setsockopt(ZMQ_IDENTITY, "B", 1);
responder.connect("tcp://localhost:5559");
while(1)
{
s_dump(responder);
sleep (1);
s_send (responder, "FromSlaveB");
}
}
怎么了? 操作系统:Ubuntu 16.04,ZMQ 版本 4.X.X
更新 1:
将 slaveA 套接字更改为 REP,但 master 仍以循环方式向 slaveA 和 SlaveB 发送消息。现在,我想我是否将消息信封正确设置为 slaveB ?但是当我打印信封时,我在slave's得到了这个证明我正确地将信封设置为B,不是吗?
[001]B
[000]
[005]jjjjj
【问题讨论】:
标签: c++ network-programming zeromq distributed-computing