0

次のコードがあり、ZMQ 経由で capnp メッセージを送信しようとしています:

::capnp::MallocMessageBuilder message;    
Guitar::Builder guitar = message.initRoot<Guitar>();  
guitar.setModel(1); 
guitar.setPrice(1200);

kj::Array<capnp::word> words = messageToFlatArray(message);

_publisher.send(words);

パブリッシュ/サブスクライブ パターンを使用していますが、次のエラーが発生します。

error: no matching member function for call to  
      'send'  
        _publisher.send(words);  
        ~~~~~~~~~~~^~~~ /usr/local/include/zmq.hpp:610:21: note: candidate function not viable: no known conversion from  
'kj::Array<capnp::word>' to  
      'zmq::message_t &' for 1st argument  
        inline bool send (message_t &msg_, int flags_ = 0)  
                    ^ /usr/local/include/zmq.hpp:627:21: note: candidate   function not viable: no known conversion from
'kj::Array<capnp::word>' to
      'zmq::message_t' for 1st argument
        inline bool send (message_t &&msg_, int flags_ = 0)
                    ^ /usr/local/include/zmq.hpp:620:35: note: candidate function template not viable: requires at least 2 arguments,
but 1 was
      provided
        template<typename I    bool send(I first, I last, int flags_=0)
                                  ^ /usr/local/include/zmq.hpp:600:23: note: candidate function not viable: requires at least 2 arguments,
but 1 was provided
        inline size_t send (const void *buf_, size_t len_, int flags_ = 0)
4

2 に答える 2

2

kj::ArrayPtrCap'n Proto の一部である KJ ライブラリからのものです。ZeroMQ は KJ について何も知らないため、そのタイプを認識しません。( ZeroMQmessage_tタイプ) またはポインター/サイズの組み合わせが必要です。できるよ:

auto bytes = words.asBytes();
_publisher.send(bytes.begin(), bytes.size());
于 2016-07-30T04:21:56.020 に答える
0

私は zeromq を使用したことがなく、capnp を使い始めたばかりですが、capnp がソケット経由でデータを送信する際にもたらすシンプルさを本当に楽しんでいます。

可能であれば、データが capnp によってもシリアル化されている場合、zeromq を介してcapnp 関数を使用してデータを送受信します。

capnp::writeMessageToFd(fd, builder)

fdソケットでbuilder、ビルダーは次のとおりです。message

受信側では、次のようなものでそれを待つことができますcapnp::StreamFdMessageReader message(socket)

これを zeromq が取り得る形式に本当にパックしたい場合は、ここで詳しく説明されているように、配列をバイトに変換することは、zeromq メッセージのコンストラクターで受け入れられるでしょう。

幸運を!

于 2016-07-29T06:55:33.707 に答える