如何使用websocket-client发送keepalive保活请求?
实现方案
分两种场景实现,可根据你的需求选择:
场景1:使用标准WebSocket协议层Ping保活
websocket-client的run_forever方法自带保活参数,不需要额外编写发送逻辑,直接添加配置即可:
# 其他代码保持不变,仅修改run_forever调用参数即可 wsapp.run_forever(ping_interval=5, ping_timeout=10)
参数说明:
ping_interval=5:每5秒自动向服务端发送一次标准Ping帧ping_timeout=10:如果发送Ping帧后10秒内未收到服务端的Pong响应,自动断开连接
场景2:使用自定义业务层保活报文
如果服务端要求发送特定格式的业务保活请求(比如指定JSON结构的报文),可以通过启动后台守护线程实现定时发送:
import websocket import json import time import threading # 替换为你业务要求的保活请求结构 reqkeepalive = {"type": "keepalive"} def keepalive_task(wsapp): while wsapp.keep_running: try: wsapp.send(json.dumps(reqkeepalive)) time.sleep(5) except: # 连接异常时自动退出线程 break def on_open(wsapp): wsapp.send(json.dumps(reqlogin)) wsapp.send(json.dumps(reqsub)) # 连接建立后启动保活线程,设置为守护线程避免阻塞程序退出 threading.Thread(target=keepalive_task, args=(wsapp,), daemon=True).start() def on_message(wsapp, msg): handle(msg) wsapp = websocket.WebSocketApp(url, on_open=on_open, on_message=on_message) wsapp.run_forever()
说明:
- WebSocketApp实例自带
keep_running属性,连接正常运行时为True,断开后自动变为False,用来控制保活线程的生命周期,不需要额外定义全局标志位。 - 保活线程设置为守护线程,主程序退出时会自动销毁,不会造成进程残留。
内容的提问来源于stack exchange,提问作者beardeadclown
相关产品推荐
相关产品推荐

