如何ping websocket服务器,以便它不会因为闲置而断开连接

Lam*_*ade 6 python websocket

我正在使用websocket-client连接到websocket服务器。我连接的服务器似乎希望我定期对其进行ping操作,否则它将断开连接。

当我连接到服务器时,它将向我发送以下消息:

0{"sid":"SomeID","upgrades":[],"pingInterval":25000,"pingTimeout":60000}
Run Code Online (Sandbox Code Playgroud)

这似乎告诉我ping间隔和ping超时。我注意到,我的websocket客户端在连接后大约1分钟25秒持续断开连接。如果将这些数字加起来为60s + 25s,您将得到1分25秒。因此,似乎我需要经常对服务器进行ping操作,以免断开连接。

如何ping服务器?我尝试了ws.ping(),但似乎不存在。我是否需要以期望的某种格式将数据发送到服务器?还是有一些内置的ping命令?

    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()
Run Code Online (Sandbox Code Playgroud)

注意:我在节点(不是python)中制作了一个websocket客户端,它在1分25秒后没有关闭。因此,似乎内置了一些ping命令,该python websocket客户端没有...

- - - - - - - - - - - - 编辑 - - - - - - - - - - - - -

尝试设置ping_interval和ping_timeout,但仍处于关闭状态:

2017-11-06 12:49:14.340037 ---------------------做东西

2017-11-06 12:49:14.340309 ---------------------做东西

发送:“ \ x89 \ x80 \\ xd9 \ xc4 \ xdd”

2017-11-06 12:49:19.341680 ---------------------做东西

2017-11-06 12:49:19.341958 ---------------------做东西

发送:“ \ x89 \ x80 \ xd9 \ x06 \ xef \ xa8”

2017-11-06 12:49:24.343426 ---------------------做东西

2017-11-06 12:49:24.343769 ---------------------做东西

发送:“ \ x89 \ x80 \ xe6 \ x92'\ xb8”

发送:'\ x88 \ x823 \ xfb $ \ xd10 \ x13'

已关闭(在此处调用了已关闭方法,服务器将我关闭了)

小智 8

从源代码来看——

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)
Run Code Online (Sandbox Code Playgroud)

指定ping_interval应该适合您。

ws.run_forever(ping_interval=70, ping_timeout=10)
Run Code Online (Sandbox Code Playgroud)