2015-01-07 3 views
0

어떻게 sendMessage 오류를 잡을 수 있습니까? 예외 전파가 없습니다. 서버가 다운 (반 개방 연결) 때 클라이언트 코드에서 오류를 catch하고 싶습니다. websocket 데몬을 실행하는 서버가 충돌하거나 재부팅되거나 네트워크 연결이 끊어지는 경우 closeConnection/ConnectionLost/ConnectionFailed 콜백이 작동하지 않습니다.Autobahn : catch sendMessage 오류

from autobahn.websocket import WebSocketClientProtocol 

class ClientProtocol(WebSocketClientProtocol): 
    def onOpen(self): 
     def heartbeat(): 
      self.sendMessage("HB") 
      self.factory.reactor.callLater(1, heartbeat) 

     # I want to catch a socket error 
     try: 
      heartbeat() 
     except Exception as e: 
      print e 

아마도 이보다 더 좋은 해결책이있을 수 있습니다. 탁구 ? 간단히 말해서 클라이언트가 서버 충돌/재부팅을 감지하고 다시 연결하는 방법을 찾을 수 없습니다. 웹 소켓 핑/퐁 :

나는

답변

0

예, 손실 연결의 빠른 검출을위한 더 나은 솔루션이 아우토반 0.6.5을 사용하고 있습니다. 이것은 WebSocket 프로토콜에 내장되어 있습니다.

AutobahnPython은 자동으로 WebSocket Ping/Pong (빠른 연결 손실 감지 및 연결 유지)과 같은 정확한 시나리오를 위해 을 지원합니다.

당신은 이러한 매개 변수를 사용하여이를 활성화 할 수 있습니다 serversclients 모두 설정할 수 있습니다

  • autoPingInterval
  • autoPingTimeout
  • autoPingSize

.

최근 AutobahnPython 버전이 필요합니다 (0.9.4+로 생각합니다). 귀하 (0.6.5)는 해당 기능을 가지고 있지 않습니다.

+0

WebSocketClientProtocol (0.9.4-2)에서 _sendAutoPing에 대한 callLater가 누락되었습니다. 그것없이 클라이언트는 autoping 기능을 지원하지 않습니다. 나는 그것을 추가했고 이제는 모든 것이 잘 작동한다. 감사합니다 – se7en

+0

그럴 경우, 문제를 제기하고 PR 할 수 있습니까? – oberstet