如何用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
相关产品推荐
相关产品推荐

