2013-05-15 4 views
0

J'utilise zeromq mode sub-pub dans mon application, mais j'ai un problème: J'ai commencé sous-app et souscrit le message, puis a commencé pub app plus tard, et l'application pub ne publiera aucun message dans une demi-heure ou plus, après cela, l'application pub publiera des messages dans la sous-application, mais la sous-application a été bloquée là sans aucun message ou certains messages sont perdus.mode sous-pub zeromq, bloquer et perdu

Si quelqu'un sait quel est le problème? Merci d'avance.

+0

Editeur: #include "stdafx.h" #include int _tmain (int argc, _TCHAR * argv []) { void * = contexte zmq_ctx_new(); void * server = zmq_socket (contexte, ZMQ_PUB); zmq_bind (serveur, "tcp: //192.168.1.212: 5555"); Printf ("attendre une heure et demie \ n"); Sommeil (1000 * 60 * 60 * 1,5); tandis que (1) { char buffer [256] = {0}; sprintf_s (tampon, "% s", "Hello World!"); zmq_send (serveur, tampon, 256, 0); printf ("send:% s \ n", tampon); Sommeil (1000 * 60); } return 0; } – Kenton

+0

Abonné: #include "stdafx.h" #include int _tmain (int argc, _TCHAR * argv []) { void * = contexte zmq_ctx_new(); void * socket = zmq_socket (contexte, ZMQ_SUB); zmq_connect (socket, "tcp: //202.101.xxx.xx: 5555"); zmq_setsockopt (socket, ZMQ_SUBSCRIBE, "", 0); tandis que (1) { char buffer [256] = {0}; zmq_recv (socket, buffer, 256, 0); printf ("recv:% s \ n", tampon); } \t return 0; } – Kenton

+0

Je pense que c'est parce que je n'ai pas mis ZMQ_TCP_KEEPALIVE dans mon socket, ai-je raison? – Kenton

Répondre

0

Idéalement, vous devez d'abord démarrer l'éditeur, puis les abonnés.

Aussi, lisez cette section dans le guide concernant les scénarios dans lesquels les messages entre PUB et SUB peuvent se perdre: http://zguide.zeromq.org/page:all#Getting-the-Message-Out

Sans plus d'informations, ou des extraits de code de ce que vous faites, il est difficile de résoudre ce problème .

+0

en fait, les extraits de code sont très faciles, le côté pusblish publie un message à l'abonné chaque minute, et l'abonné souscrire le message. tout est ok quand le côté publication publie un message toutes les minutes, mais quand j'ajoute Sleep plus d'une heure avant le message publish side publish, et après une heure plus tard, il publie un message, mais maintenant, l'abonné ne peut plus recevoir de message. les deux côtés sont sur une machine internet différente, pas de réseau interne. – Kenton