Я использую ZeroMQ с протоколом NACK-Oriented Reliable Multicast (NORM) norm://
.Документация содержит только код Python, поэтому вот мой код C ++:
PUB
Отправитель:
string sendHost = "norm://2,127.0.0.1:5556";// <NormNodeId>,<addr:port>
string tag = "MyTag";
string sentMessage = "HelloWorld";
string fullMessage = tag + sentMessage;
zmq::context_t *context = new zmq::context_t( 20 );
zmq::socket_t publisher( *context, ZMQ_PUB );
zmq_connect( publisher, sendHost.c_str() );
zmq_send( publisher,
fullMessage.c_str(),
fullMessage.size(),
0
);
SUB
Приемник:
char message[256];
string receiveHost = "norm://1,127.0.0.1:5556";// <NormNodeId>,<addr:port>
string tag = "MyTag";
zmq::context_t *context = new zmq::context_t( 20 );
zmq::socket_t subscriber( *context, ZMQ_SUB );
zmq_bind( subscriber, receiveHost.c_str() );
zmq_setsockopt( subscriber, ZMQ_SUBSCRIBE, tag.c_str(), tag.size() );
zmq_recv( subscriber,
message,
256,
0
);
cout << bytesReceived << endl;
cout << message << endl;
Проблема, с которой я сталкиваюсь, заключается в том, что согласно документации оба .bind()
и .connect()
являются взаимозаменяемыми.
В моем случае они оба делают .bind()
, в результате чего ZeroMQ выдает ошибку, сообщающую, что второе связывание не выполнено из-за ошибки уже используемого адреса.