2016-06-17 6 views
0

をサブスクライブします。zmqパイソンはC++を公開私はのpython3中とZeroMQの加入者(<strong><code>zhelpers.hpp</code></strong>を使用して)<code>c++</code>でZeroMQの出版社を持っている

問題は、サブスクライバにメッセージが記録されていないことです。 ZeroMQフィルターに問題があると思います。私は、c++.setsockopt()を正しく使用してpythonパブリッシャーからのメッセージを受け取る方法を理解できません。

Pythonの出版社:

import zmq 
    context = zmq.Context() 
    socket = context.socket(zmq.PUB) 
    context = zmq.Context() 
    socket = context.socket(zmq.PUB) 
    socket.bind("tcp://*:4004") 
    while True: 
     command = input("insert command ") 
     if (command=='c'): 
      topic = "CALL".encode("ascii") 
      data = "blabla".encode("ascii") 
      socket.send_multipart([topic,data]) 

C++加入者:

#include "zhelpers.hpp" 
    zmq::context_t context(1); 
    zmq::socket_t subscriber1 (context, ZMQ_SUB); 
    subscriber1.connect("tcp://127.0.0.1:4004"); 
    subscriber1.setsockopt(ZMQ_SUBSCRIBE, "CALL", 4); 
    while (1) { 
     // read envelope 
     std::string address = s_recv (subscriber1); 
     // read message 
     std::string contents = s_recv (subscriber1); 
     std::cout << "[" << address << "] " << contents << std::endl; 

Pythonの加入者が罰金workkingされます。コード:docsから

subscriber = context.socket(zmq.SUB) 
    subscriber.connect("tcp://127.0.0.1:4004") 
    subscriber.setsockopt(zmq.SUBSCRIBE, b"CALL") 
    [command, contents] = self.subscriber.recv_multipart() 
+0

「py3」と「C++」の両方が同じバージョンのZeroMQ API仕様を使用していることを確認できますか?メッセージヘッダーのサイズ/マッピングにおける最近の動きは、古いバージョンの 'C++'バインディングの動作を無効にした可能性があります。 – user3666197

+0

はい、正しく、バージョンが一致しません。 –

+0

**嬉しかったです**。自由にお気軽に**お楽しみください**他の** 'ZeroMQ'答え** >>> http://stackoverflow.com/search?tab=votes&q=user%3a3666197%20%5bzeromq%5d – user3666197

答えて

0

私はzhelpers.hを使用してCにスワイジングしました。 libzmq-devをversion> 3.2にアップデートしなければなりませんでした。私はzガイドの例を使用しました:zmq subscriber in c

0

setsockoptの最後の引数は、オプション値の長さです。あなたの場合、フィルター値として渡す文字列の長さ。

長さとして8を入力すると、C++では8文字が読み込まれますが、フィルタ文字列は4文字分にすぎません。その結果、いくつかのランダムなデータを含むフィルタが生成されます。あなたが運が良ければ、フィルターは時々マッチしますが、それは非常に不安です。

変更し、これにメソッド呼び出し:

subscriber1.setsockopt(ZMQ_SUBSCRIBE, "CALL", 4); 

あなたはそこだけではなく、よりあるものを読むのC++をしたいです。

+0

これは意味があります。 Hower加入者はまだ何も得られません。 –

+0

購読通話を削除すると何か手に入りますか? (デフォルトのサブスクリプションはすべてのメッセージです) – David

+0

私は 'subscriber1.setsockopt(ZMQ_SUBSCRIBE、" CALL "、4);'という行を削除しました。まだ何も... –

関連する問題

 関連する問題