2013-05-15 7 views
0

제 앱에서 zeromq 서브 펍 모드를 사용하고 있는데 문제가 있습니다 : 서브 애플 리케이션을 시작하고 메시지를 구독 한 다음 나중에 펍 애플 리케이션을 시작하고 펍 애플 리케이션을 시작했습니다. 그 후 펍 앱은 하위 앱에 메시지를 게시하지만 메시지가 없으면 하위 앱이 차단되거나 일부 메시지가 손실됩니다.zeromq 서브 펍 모드, 블록 및 손실

누군가가 문제를 알고 있다면? 미리 감사드립니다.

+0

출판사 : 사용법 #include "STDAFX.H" #INCLUDE INT _tmain (INT는 argc, _TCHAR *는 argv []) { 공극 * 컨텍스트 zmq_ctx_new =(); void * server = zmq_socket (컨텍스트, ZMQ_PUB); zmq_bind (서버, "tcp : //192.168.1.212 : 5555"); printf ("1 시간 30 분 기다림 \ n"); 수면 (1000 * 60 * 60 * 1.5); while (1) { char 버퍼 [256] = {0}; sprintf_s (버퍼, "% s", "Hello World!"); zmq_send (서버, 버퍼, 256, 0); printf ("send : % s \ n", 버퍼); 수면 (1000 * 60); } return 0; } – Kenton

+0

구독자 : 사용법 #include "STDAFX.H" #INCLUDE INT _tmain (INT는 argc, _TCHAR *는 argv []) { 공극 * 컨텍스트 zmq_ctx_new =(); void * socket = zmq_socket (컨텍스트, ZMQ_SUB); zmq_connect (소켓, "tcp : //202.101.xxx.xx : 5555"); zmq_setsockopt (소켓, ZMQ_SUBSCRIBE, "", 0); while (1) { char 버퍼 [256] = {0}; zmq_recv (소켓, 버퍼, 256, 0); printf ("recv : % s \ n", 버퍼); } \t return 0; } – Kenton

+0

내 소켓에 ZMQ_TCP_KEEPALIVE를 설정하지 않았기 때문에 생각합니다. 맞습니까? – Kenton

답변

0

이상적으로 게시자를 먼저 시작한 다음 구독자를 시작해야합니다. 또한

은, PUB와 SUB 간의 메시지가 손실 얻을 수있는 시나리오에 관한 가이드에서이 부분을 읽으 : 당신이 무슨 일을하는지의 http://zguide.zeromq.org/page:all#Getting-the-Message-Out

을 추가 정보가 없으면, 또는 코드 조각을,이 문제를 해결하기 어렵다 .

+0

실제로 코드 스 니펫은 매우 쉽고 매 시간마다 구독자에게 메시지를 게시하고 구독자는 메시지를 구독합니다. 게시자 측에서 매분 메시지를 게시 할 때 모든 것이 괜찮지 만 게시 측에서 메시지를 게시하기 전에 1 시간 이상 수면을 추가하면 1 시간 후에 메시지가 게시되지만 이제는 구독자가 메시지를받을 수 없습니다. 양측은 내부 네트워크가 아닌 다른 인터넷 컴퓨터에 있습니다. – Kenton