Ich versuche, einfache ZMQ-Anwendung (ROUTER
/DEALER
) auszuführen.ZMQ Hallo Welt funktioniert nicht
Ich sende einfach eine Anfrage von DEALER
an ROUTER
, senden Sie es zurück. Aber DEALER
kann es nicht empfangen.
Ich laufe es in einem Prozess (ROUTER
hat einen eigenen Thread).
#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;
}
Ich habe eine Ausgabe:
Dealer: Connecting to hello world server…
Dealer: Sending Hello 0…
Router: Received request
Router: Sending
Router: Received request
Router: Sending
Ist der Ausgang Sie die * tatsächlichen zeigen * oder * erwartet * ausgegeben? Wir brauchen wirklich beide (richtig beschriftet natürlich). Und haben Sie versucht, einen Debugger zu verwenden, um durch den Code zu gehen, um zu sehen, dass es das tut, was Sie erwarten? –
@Someprogrammerdude Es ist tatsächliche Ausgabe. Ich erwarte, dass Händler sendet msg, Router empfangen msg und sendet etwas an den Händler. Händler erhalten Nachricht und senden an Router usw. Ich weiß, dass es Rennen geben kann und Ausgabe kann in falscher Reihenfolge sein, aber das Wichtigste ist, dass es kein Protokoll gibt: 'Dealer: Received' .... Dealer kann nicht empfangen msg ... Weißt du, warum? – peter55555
Und es gibt zwei Protokolle: 'Router: Empfangene Anfrage ', aber Händler sendet nur eine jetzt ... – peter55555