J'essaie d'utiliser zeroMQ
comme un moyen d'implémenter un système de messagerie entre plusieurs threads. J'ai essayé le code ci-dessous mais ça ne marche pas; dans le spécifique, l'appel à zmq_recv
dans chaque thread n'attend pas/bloque tout message à exécuter.communication inter-thread utilisant des messages ZeroMQ
Pouvez-vous m'aider avec ce morceau de code?
J'utilise Linux OS et gcc
Cordialement
AFG
static void *
worker_routine (void *context) {
// Socket to talk to dispatcher
void *receiver = zmq_socket (context, ZMQ_REP);
zmq_connect (receiver, "inproc://workers");
while (1) {
zmq_msg_t request;
zmq_msg_init(&request);
zmq_recv(receiver, &request, 0);
printf ("Received request\n");
// Do some 'work'
usleep (1000);
// Send reply back to client
zmq_send (receiver, &request, 0);
}
zmq_close (receiver);
return NULL;
}
int main (void) {
void *context = zmq_init (1);
void *clients = zmq_socket (context, ZMQ_REP);
zmq_bind (clients, "inproc://workers");
int thread_nbr;
for (thread_nbr = 0; thread_nbr < 5; thread_nbr++) {
pthread_t worker;
pthread_create (&worker, NULL, worker_routine, context);
}
zmq_close (clients);
zmq_term (context);
return 0;
}
Je lisais à nouveau le guide ZeroMQ. Est-ce que quelqu'un sait si je dois créer un zmq_device comme QUEUE à mes fins? J'ai également remarqué qu'il y a des exemples utilisant "ipc" comme protocole .. J'ai toujours supposé que pour MT je DOIS utiliser "inproc" .. quelqu'un sait si cela peut avoir un impact? –