ZeroMQ를 사용하여 게시자와 가입자 네트워크를 하나씩 구현했습니다. 구독자가 게시자에게 데이터를 보낼 수 있기를 원하기 때문에 XPUB와 XSUB를 사용했습니다. 내 코드는 구독자가 게시자로부터 데이터를받을 수 있음을 의미하는 XPUB + SUB에서 작동합니다. 그러나 XPUB + XSUB에서는 작동하지 않습니다. 이것은 아마도 "setsockopt (ZMQ_SUBSCRIBE, ...)"를 수행 할 수 없기 때문일 수 있습니다. 런타임에 항상 "잘못된 인수"오류가 발생합니다. 여기 내 코드는 다음과 같습니다.ZeroMQ, XSUB가 수신되지 않음
/* Code */
zmq::context_t context (1);
// Socket to talk to server
std::cout << "Collecting updates from weather server...\n" << std::endl;
zmq::socket_t subscriber (context, ZMQ_XSUB);
subscriber.connect("tcp://localhost:5556");
char *filter = "10001 ";
subscriber.setsockopt(ZMQ_SUBSCRIBE, filter, strlen (filter));
/*
zmq::message_t msg(10);
sprintf ((char *) msg.data(), "%05d %d %d", 1, 2, 3);
std::cout << "To Send from SUB" << std::endl;
subscriber.send(msg);
std::cout << "Send from SUB" << std::endl;
*/
// Process 100 updates
int update_nbr;
long total_temp = 0;
for (update_nbr = 0; update_nbr < 10; update_nbr++) {
zmq::message_t update;
int zipcode, temperature, relhumidity;
subscriber.recv(&update);
std::istringstream iss(static_cast<char*>(update.data()));
iss >> zipcode >> temperature >> relhumidity ;
total_temp += temperature;
}
std::cout << "Average temperature for zipcode '"
<<"' was "<<(int) (total_temp/update_nbr) <<"F"
<< std::endl;
subscriber.setsockopt를 설정하는 방법에있어 잘못된 점은 무엇입니까? XSUB를 SUB로 대체하면 작동합니다. 그러나 코드에서 subscribe.send (msg)를 수행 할 수 없습니다. 대신 보내 사용해야하고 메시지의 첫 번째 바이트는 필터 변수를 보내 귀하의 경우 1.
을 할 수 있지만 값과 필터의 시작에 바이트를 추가해야 가입에 대한 setsockopt를 사용의