2017-11-05 1 views
1

Ich benutze websocket-client Verbindung zu einem Websocket-Server. Der Server, mit dem ich verbunden bin, scheint zu erwarten, dass ich ihn periodisch anpinge, sonst unterbricht er mich.Wie ping WebSocket-Server, so dass es mich nicht für Leerlauf trennt

Recht, wenn ich mit dem Server verbinden, sendet mir diese Nachricht:

0{"sid":"SomeID","upgrades":[],"pingInterval":25000,"pingTimeout":60000} 

Das scheint mir zu sagen, das Ping-Intervall und Ping-Timeout. Mir ist aufgefallen, dass mein Websocket-Client immer wieder unterbrochen wird ~ 1 Minute und 25 Sekunden, nachdem ich mich verbunden habe. Und wenn Sie diese Zahlen 60s + 25s addieren, erhalten Sie 1 Minute und 25 Sekunden. Es scheint also, dass ich diesen Server immer wieder anpingen muss, damit er mich nicht trennt.

Wie pinge ich den Server an? Ich habe versucht ws.ping(), aber das schien nicht zu existieren. Muss ich Daten in einem erwarteten Format an den Server senden? Oder gibt es einen eingebauten Ping-Befehl?

websocket.enableTrace(True) 
    ws = websocket.WebSocketApp("wss://socket.serverssite.com/socket.io/?transport=websocket", 
           on_message=on_message, 
           on_error=on_error, 
           on_close=on_close) 
    ws.run_forever() 

Hinweis: Ich habe einen websocket Client in Knoten (nicht Python) und es nicht nach 1 min 25 Sekunden geschlossen bekommt. So scheint es, dass einige eingebaute Ping hat, dass dieser Python Websocket-Client nicht ...

------------------------ Edit- ------------------------

Versuchte ping_interval und PING_TIMEOUT Einstellung, aber es schließt noch:

2017.11.06 12 : 49: 14.340037 --------------------- Doing stuff

2017-11-06 12: 49: 14.340309 --------- ------------ Doing stuff

senden: '\ x89 \ x80 \\ xd9 \ xc4 \ xdd'

2017-11-06 12: 49: 19.341680 --------------------- Dinge tun,

2017-11-06 12: 49: 19,341958 --------------------- Sachen tun

senden: ‚\ x89 \ x80 \ XD9 \ x06 \ XeF \ XA8'

2017-11-06 12: 49: 24,343426 --------------------- Doing Sachen

2017-11-06 12: 49: 24.343769 --------------------- Doing stuff

senden: „\ x89 \ x80 \ XE6 \ x92' \ XB8"

senden: '\ x88 \ x823 \ xfb $ \ XD10 \ x13'

geschlossen (Hier ist, wo die geschlossene Methode wird aufgerufen , der Server herunter mich nach unten)

Antwort

0

aus dem Quellcode -

def run_forever(self, sockopt=None, sslopt=None, 
       ping_interval=0, ping_timeout=None, 
       http_proxy_host=None, http_proxy_port=None, 
       http_no_proxy=None, http_proxy_auth=None, 
       skip_utf8_validation=False, 
       host=None, origin=None) 

die ping_interval angeben sollte für Sie arbeiten.

ws.run_forever(ping_interval=70, ping_timeout=10) 
+0

Danke. Aus irgendeinem Grund schließt der Server es immer noch auf mich. Ich frage mich, ob der Ping, den diese Bibliothek sendet, nicht das ist, was der Server erwartet. Ich sende Dinge wie, send: '\ x89 \ x80f \ x7fLt', sende: '\ x89 \ x8000 \ xf8 \ x85', sende: '\ x88 \ x82-l \ xb8 \ x00.\ x84 'aber es wird immer noch nach 1 Minute 25 Sekunden schließen. – LampShade

Verwandte Themen