websocket-client 是一个在 Python 中广泛使用的库,用于创建 WebSocket 客户端并实现与 WebSocket 服务器的双向通信。更多的关于websocket协议介绍,可以看看我之前写的文章哦!
【学习心得】websocket协议简介并与http协议对比http://t.csdnimg.cn/C3hEQ
一、安装和快速入门
pip install websocket-client
两个基本的使用示例来说明如何创建一个 WebSocket 客户端、连接到服务器、发送消息。
(1)websocket短连接
# 安装websocket-client库 # pip install websocket-client # 导入websocket import websocket # 创建客户端实例 ws = websocket.WebSocket() # 连接指定的ws服务器 ws.connect("ws://echo.websocket.events") # 这个网址是官方测试网址 # 发送消息 ws.send("Hello!") # print(ws.send("Hello!")) # 返回的是你发送信息的字节大小,并不是真的服务器响应给你的数据 # 接收响应 res = ws.recv() print(res) # recv方法才能得到服务器响应给你的数据 # 关闭ws连接 ws.close()
(2)websocket长连接
# 导入websocket-client包 import websocket # 定义on_message回调函数用来处理 websocket事件——客户端接收服务端数据时触发 def on_message(ws_app, message): print(message) # 当客户端接收到服务器响应回的数据时,把他打印出来显示一下 # 实例化一个ws客户端 url = "wss://testnet-explorer.binance.org/ws/block" ws = websocket.WebSocketApp(url=url, on_message=on_message) # 传入的是回调函数所以不要小括号 # 开启ws长连接 # 启动一个无限循环,保持WebSocket连接的持续开放状态,并监听来自服务器的数据流。 # 当有新的消息到达时,将通过 on_message 回调函数处理这些消息。 ws.run_forever()
二、websocket的所有事件介绍
WebSocket 对象的相关事件:
事件 | 事件回调函数 | 描述 |
open | on_open | 连接建立时触发 |
message | on_message | 客户端接收到服务器数据时触发 |
error | on_error | 通信发生错误时触发 |
close | on_close | 连接关闭时触发 |
# 导入websocket-client库 import websocket # 定义on_message事件回调函数 def on_message(ws_app, message): print("接收到服务器响应:", message) # 定义on_error事件回调函数 def on_error(ws_app, error): print(error) # 定义on_open事件回调函数 def on_open(ws_app): print('已连接到WebSocket服务器') # 定义on_close事件回调函数 def on_close(ws_app): print('已关闭和WebSocket服务器的连接') # 实例化一个ws客户端 url = "ws://echo.websocket.events" ws = websocket.WebSocketApp( url=url, on_open=on_open, on_message=on_message, on_error=on_error, on_close=on_close, ) # 开启长连接,开始监听 ws.run_forever() # 发送信息 ws.send("hello!") # 关闭连接 ws.close()
三、如何主动退出长连接?
""" 设置一个退出标志: 在运行 run_forever() 的外部定义一个全局变量作为退出标志, 并在需要关闭连接的地方将其设置为True。 然后,在 on_message() 或其他回调函数(如 on_error()、on_close() 等)中检查这个标志, 当满足特定条件或接收到信号时调用 ws_app.close()。 """ import websocket should_close = False def on_message(ws_app, message): print(message) # 检查是否需要关闭连接 if should_close: ws_app.close() ws = websocket.WebSocketApp( "wss://testnet-explorer.binance.org/ws/block", on_message=on_message ) # 当你需要关闭连接时 def close_websocket(): global should_close should_close = True ws.close() # 开始监听 ws.run_forever()