You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:12:01