2012-10-08 15 views
3

클라이언트 (PULL)가 서버 (PUSH)에 연결되어 있습니다. 처음에는 잘 작동합니다. 그러나 나중에 연결이 끊어지며 클라이언트 측 ZeroMQ가 서버에 다시 연결을 시도하지 않습니다.ZeroMQ 클라이언트 연결이 끊어졌습니다.

하나의 신비한 점은 클라이언트 측과 서버 측에서 netstat을 수행하면 서버 측에 해당 항목이없는 반면 클라이언트 측에서는 여전히 연결이 설정되었음을 나타냅니다. 나는 이것이 클라이언트 측이 재접속을하지 않는 이유라고 생각합니다.

PS : 클라이언트와 서버의 IDC가 다르며 둘 사이에 대역폭 제한이 있습니다. 그러나 연결이 끊어지면 모니터에서 밴드 제한에 도달하지 않는다고 표시합니다.

그리고, (연결이 잘 때) 내가 서버 측에서 NETSTAT 할 때, 때로는 보내기-Q 열이 매우 큰, 그리고 내가 가진 모든 정보의 그 0

에 내려 놓습니다. 자세한 내용이 필요하면 알려주세요.

+1

어떤 언어입니까? 모든 코드 예제? 컨텍스트를 종료하는 경우 (범위를 벗어나면 소켓이 다시 연결되지 않습니다 ... 일반적으로 모든 것이 여전히 존재하면 zmq는 연결이 끊어 지거나 많은 문제없이 연결을 처리합니다 ... – g19fanatic

+0

더 이상 찾지 못했습니까? 이것에 관한 정보? 나는 C# 바인딩 (clrzmq)을 사용하고 있으며 이와 같은 것을 경험했다. 갑자기 모든 수신 데이터가 손실되어 여러 종단점이 연결된 SUB 소켓을 사용합니다. 연결 끊기를 호출하고 다시 연결하면 (클라이언트에서) 모두 양호합니다. 내가 다시 일어날 수 있는지 netstat에서 볼 것입니다. –

+0

ZeroMQ 소켓이 잠시 동안 조용한 끝점을 끊거나 연결하도록 강제하는 무차별 대인 연결 해제 감지 (하트 비트 및 시간 초과 사용)를 구현했다고 추가 할 수 있습니다. 이 불행히도 "리셋"연결을 위해 양쪽에있는 모든 대기열이 삭제된다는 단점이 있습니다. –

답변

2

나는 이것이 아주 오래된 질문이라는 것을 알았지 만, 정확히 똑같은 문제에 부딪혔다. 내 문제를 해결 했으므로 어떤 점에서 누군가에게 도움이 되었기를 바랍니다.

나는 같은 시나리오를했지만, ROUTER -> ROUTER와. 처음에는 모든 것이 잘 작동했지만 15 분 후에 메시지를 보내지 않으면 메시지가 더 이상 메시지를 보내지 않습니다. 그런 다음 찾았습니다 : http://api.zeromq.org/3-2:zmq-setsockopt.

# self.client is my socket here 
self.client.setsockopt(zmq.TCP_KEEPALIVE, 1) 
self.client.setsockopt(zmq.TCP_KEEPALIVE_IDLE, 300) 
self.client.setsockopt(zmq.TCP_KEEPALIVE_INTVL, 300) 

이 운영 체제 설정을 무시하지 내가 더 이상 연결 시간 초과를보고 있어요 또는 드롭 : 나를 위해 일한 세 가지 소켓 옵션 (pyzmq 사용)이었다.

관련 문제