Нужно ли ZMQ_ROUTER и ZMQ_DEALER разделять пустую строку? - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть вопрос по поводу розеток ZeroMQ для дилеров и маршрутизаторов.У меня есть такая архитектура ниже:

enter image description here

У Dealer1 и Dealer2 есть идентификаторы, и я установил их следующим образом:

m_socket->setsockopt(ZMQ_IDENTITY, socketId.data(), socketId.size());

Я отправляю сообщения из сокета Dealer1 в Dealer3 через сокет Router.Это zmq :: proxy

zmq::context_t context(1);
zmq::socket_t frontEnd(context, ZMQ_ROUTER);
frontEnd.bind(socketAddress);
zmq::socket_t backend(context, ZMQ_DEALER);
backend.bind("inproc://mainSocket");
zmq::proxy(frontEnd, backend, nullptr);

Когда я отправляю сообщение Dealer3 от Dealer1 следующим образом, все в порядке:

 std::string ReceiveReplyString()
 {
    zmq::message_t message;
    int ret = m_socket->recv(&message);
    if (ret)
    {
       return std::string(static_cast<char*>(message.data()), message.size());
    }
    else
    {
       throw zmq::error_t();
    }    
}

const std::string emptyString = "";
zmq::message_t request(dataString.data(), dataString.size());
int ret = m_socket->send(request);
if (ret)
{
   m_replyString = ReceiveReplyString();
   //Sending empty string as delimeter
   zmq::message_t delimeter(emptyString.size());
   memcpy(delimeter.data(), emptyString.data(), emptyString.size());
   m_socket->send(delimeter);
   }
   else
   {
      throw zmq::error_t();
   }
}

Я могу отправлять несколько сообщений, но если я отправляю сообщениябез пустой строки после отправки реального сообщения, я не могу отправить или получить сообщение после первого.

...