J'essaie d'exécuter l'application ZMQ simple (ROUTER
/DEALER
).ZMQ Bonjour le monde ne fonctionne pas
Je viens d'envoyer une demande de DEALER
à ROUTER
, renvoyez-le. Mais DEALER
ne peut pas le recevoir. Je l'exécute dans un processus (ROUTER
a son propre fil).
#include <zmq.hpp>
#include <string>
#include <iostream>
#include <thread>
void router()
{
zmq::context_t context(1);
zmq::socket_t socket(context, ZMQ_ROUTER);
socket.bind("tcp://*:5561");
while(1)
{
// Wait for next request from client
zmq::message_t reply;
socket.recv (&reply);
std::cout << "Router: Received request" << std::endl;
// Send reply back to client
std::string string= "example";
zmq::message_t message(string.size());
memcpy (message.data(), string.data(), string.size());
std::cout << "Router: Sending" << std::endl;
socket.send (message);
}
}
int main()
{
std::thread t{&router};
// Prepare our context and socket
zmq::context_t context (2);
zmq::socket_t socket (context, ZMQ_DEALER);
std::cout << "Dealer: Connecting to hello world server…" << std::endl;
socket.connect ("tcp://127.0.0.1:5561");
for (int i = 0; i != 10; i++)
{
zmq::message_t request (5);
memcpy (request.data(), "Hello", 5);
std::cout << "Dealer: Sending Hello " << i << "…" << std::endl;
socket.send (request);
zmq::message_t reply;
socket.recv (&reply);
std::cout << "Dealer: Received " << i << std::endl;
}
return 0;
}
J'ai une sortie:
Dealer: Connecting to hello world server…
Dealer: Sending Hello 0…
Router: Received request
Router: Sending
Router: Received request
Router: Sending
La sortie vous montrer la réelle * * ou * prévu * sortie? Nous avons vraiment besoin des deux (correctement étiquetés bien sûr). Et avez-vous essayé d'utiliser un débogueur pour parcourir le code pour voir qu'il fait ce que vous attendez de lui? –
@Someprogrammerdude C'est la sortie réelle. Je m'attends à ce que le concessionnaire envoie msg, Router reçoit msg et envoie quelque chose au concessionnaire. Le concessionnaire reçoit msg et envoie au routeur etc. Je sais qu'il peut y avoir course et la production peut être dans le mauvais ordre mais le plus important est qu'il n'y a aucun log: 'Dealer: Received' .... Le revendeur ne peut pas recevoir msg ... Est-ce que tu sais pourquoi? – peter55555
Et il y a deux logs: 'Router: Received request' mais Dealer n'en envoie qu'un seul maintenant ... – peter55555