ZMQ_DEALER con ZMQ_REP
Lamento esta pregunta un tanto estúpida, pero no encontré ninguna otra respuesta. ¿Cómo puedo enviar un mensaje desde ZMQ_DEALER
a ZMQ_REP
?
Aquí está el código del servidor:
std::string ans;
zmq::context_t context;
zmq::socket_t socket(context, ZMQ_DEALER);
int port = bind_socket(socket);
std::cout<<port<<std::endl;
std::cout<<"enviando\n";
send_message(socket,"test");
std::cout<<"ÉXITO\n";
std::cout<<"intentando recibir mensaje del cliente...\n";
ans=receive_message(socket);
std::cout<<"ÉXITO TOTAL\n";
std::cout<<ans<<std::endl;
close(port);
y aquí está el código del cliente:
zmq::context_t context;
zmq::socket_t socket(context, ZMQ_REP);
std::string recv;
recv=receive_message(socket);
std::cout<<"éxito total\n";
send_message(socket,"éxito");
std::cout<<recv<<std::endl;
El cliente no puede recibir el mensaje del servidor. Intenté encontrar algo en el libro oficial de ZeroMQ y encontré esto:
“Cuando un socket
ZMQ_DEALER
está conectado a un socketZMQ_REP
, cada mensaje enviado debe constar de una parte de mensaje vacía, el delimitador, seguido de una o más partes del mensaje.”
davy.ai
Para enviar un mensaje desde un
ZMQ_DEALER
a unZMQ_REP
, es necesario asegurarse de que cada mensaje enviado consista en una parte de mensaje vacía como delimitador seguida por una o más partes de cuerpo. Esto se debe a que cuando un socketZMQ_DEALER
está conectado a un socketZMQ_REP
, la parte de mensaje vacía actúa como un identificador de solicitud que el socketZMQ_REP
puede utilizar para asociar la solicitud con la respuesta correspondiente.Por lo tanto, en el código del servidor, es necesario modificar la función
send_message
para incluir una parte de mensaje vacía como el primer marco del mensaje. La función modificada debería lucir así:En el código del cliente, también es necesario modificar la función
send_message
para incluir una parte de mensaje vacía como el primer marco del mensaje antes de enviar el mensaje de respuesta. La función modificada debería lucir así:Con estas modificaciones, el cliente debería poder recibir la solicitud del servidor y enviar una respuesta de vuelta.