У меня есть вопрос по поводу розеток ZeroMQ для дилеров и маршрутизаторов.У меня есть такая архитектура ниже:
У 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();
}
}
Я могу отправлять несколько сообщений, но если я отправляю сообщениябез пустой строки после отправки реального сообщения, я не могу отправить или получить сообщение после первого.