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

如何用Ping/Pong检测websocket-client连接是否未断开?

使用websocket-client的Ping/Pong机制检测连接状态

直接调用ws.ping()是可行的方式,用来验证WebSocket连接是否仍处于开放状态,但当连接已经断开时,该调用会触发异常,需要你捕获并处理。

关键细节说明:

  • 当连接正常时,ws.ping()会向服务器发送WebSocket Ping帧,服务器应回复Pong帧。websocket-client库默认会自动处理Pong响应,无需你手动编写接收逻辑。
  • 如果连接已中途断开(比如服务器主动关闭、网络中断),调用ws.ping()会抛出WebSocketConnectionClosedException,或是底层socket相关的异常(如ConnectionResetError、socket.error)。

安全调用示例:

import socket
from websocket import create_connection, WebSocketConnectionClosedException

# 建立连接
ws = create_connection(
    "ws://localhost/",
    socket=my_socket,
    sockopt=((socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1),)
)

# 检测连接状态
try:
    ws.ping()
    print("连接处于开放状态")
except WebSocketConnectionClosedException:
    print("连接已被关闭")
    # 此处可添加重连或资源清理逻辑
except (ConnectionResetError, socket.error) as e:
    print(f"连接异常中断: {str(e)}")
    # 处理网络异常逻辑
finally:
    ws.close()

额外提示:

你设置的SO_KEEPALIVE是TCP层面的保活机制,和WebSocket的Ping/Pong可以配合使用,前者负责检测底层TCP连接,后者则是应用层的主动探测,两者结合能更可靠地监控连接状态。

内容的提问来源于stack exchange,提问作者rustyocean

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:01:23