2016-08-08 4 views
0

저는 ZMQ을 처음 사용하고 있으며 구독 등록 패턴에 대한 자습서를 이미 작성했습니다. 하지만 제 신청서에는 그다지 적용되지 않습니다. 두 가지 유형의 응용 프로그램이 있습니다. 응용 프로그램은 네트워크를 통해 여러 "응용 프로그램 2"에 대한 연결을 만들고 데이터를 보낼 수 있습니다.ZMQ 게시/구독 패턴 게시자가 구독자에게 연결

게시/구독 패턴을 사용하여 구현하려고 시도했지만 구독자가 게시자에 연결하는 대신 게시자가 구독자에 연결합니다.

출판사 :

zmq::context_t context(1); 
zmq::socket_t socket(context, ZMQ_PUB); 

socket.connect("tcp://localhost:5555"); 

std::string text = "Hello World"; 
zmq::message_t message(text.size()); 
memcpy(message.data(), text.c_str(), text.size()); 

socket.send(message); 

구독자 :

zmq::context_t context(1); 
zmq::socket_t socket(context, ZMQ_SUB); 

socket.bind("tcp://*:5555"); 
const char* filter = "Hello "; 
socket.setsockopt(ZMQ_SUBSCRIBE, filter, strlen(filter)); 

zmq::message_t request; 
socket.recv(&request); 

std::string message = std::string(static_cast<char*>(request.data()), request.size()); 

std::cout << "Message received!" << std::endl; 
std::cout << message << std::endl; 

게시자 에러없이 finnishes하지만, 가입자가 RECV 붙어있다(). 예 (구독자 우선)

답변

0

해결책을 직접 찾았습니다. 구독자가받을 준비가되기 전에 게시자가 메시지를 보내는 것이 문제입니다. 상기

socket.send(message); 

이 일을했다

zmq_sleep(1) 

전에 간단한.