ZMQ

2016-07-28 2 views
0

을 통해 capnp 메시지를 보낼 수 없습니다 내가 다음 코드는 내가 ZMQ를 통해 capnp 메시지를 보내려고하고있다 : 나는 게시 - 구독 패턴 나는 다음과 같은 오류를 얻고있다 &을 사용하고ZMQ

::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) 

답변

0

나는 zeromq 사용하지 않은, 나는 단지 capnp를 사용하기 시작 해요,하지만 난 정말 capnp 소켓을 통해 데이터를 전송하기 가져다주는 단순함을 즐길 수 있습니다. 당신이 할 수있는 경우 데이터도 capnp 직렬화 할 때

나는 데이터를 송수신 할 수 zeromq 이상 capnp functions을 사용합니다 :

capnp::writeMessageToFd(fd, builder)

fd 소켓과 builder는 빌더입니다 : message

수신 측에서 다음과 같이 기다릴 수 있습니다. capnp::StreamFdMessageReader message(socket)

zeromq가 취할 수있는 형식으로이 것을 압축하려고했는데, 아마도 here과 같이 배열을 바이트로 변환하면 zeromq 메시지의 생성자에 사용할 수 있습니다.

행운을 빈다.

+0

내가 KJ :: ArrayPtr 바이트 = words.asBytes() 추가; _ publisher.send (바이트); 나는 여전히 비슷한 오류가 발생하고 있습니다 : 'kj :: ArrayPtr '에서 으로의 알려진 변환이 없습니다. 'zmq :: message_t &'@Ditofry – nik

1

kj::ArrayPtr은 Cap'n Proto의 일부인 KJ 라이브러리에서 가져온 것입니다. ZeroMQ는 KJ에 대해 아무 것도 모르기 때문에 해당 유형을 인식하지 못합니다. message_t (ZeroMQ 유형) 또는 포인터/크기 콤보가 필요합니다. 당신은 할 수 있습니다 :

auto bytes = words.asBytes(); 
_publisher.send(bytes.begin(), bytes.size()); 
+0

고맙습니다. @Kenton Varda. 정말 고마워. :). – nik