2016-08-08 7 views
0

私はZMQを初めて使用しており、すでにパブリッシュサブスクライブパターンに関するチュートリアルを行っています。しかし、私のアプリケーションでは、あまり適用されません。私は2種類のアプリケーションを持っています。アプリケーションは、ネットワーク上の複数の「アプリケーション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) 

前にシンプル。