【学习心得】Python好库推荐——websocket-client

websocket-client 是一个在 Python 中广泛使用的库,用于创建 WebSocket 客户端并实现与 WebSocket 服务器的双向通信。更多的关于websocket协议介绍,可以看看我之前写的文章哦!

【学习心得】websocket协议简介并与http协议对比http://t.csdnimg.cn/C3hEQ

一、安装和快速入门

bash 复制代码
pip install websocket-client

两个基本的使用示例来说明如何创建一个 WebSocket 客户端、连接到服务器、发送消息。

(1)websocket短连接

python 复制代码
# 安装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长连接

python 复制代码
# 导入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 | 连接关闭时触发 |

python 复制代码
# 导入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()

三、如何主动退出长连接?

python 复制代码
"""
设置一个退出标志:
在运行 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()
相关推荐
垚垚 Securify 前沿站2 小时前
深入了解 AppScan 工具的使用:筑牢 Web 应用安全防线
运维·前端·网络·安全·web安全·系统安全
bdawn6 小时前
深度集成DeepSeek大模型:WebSocket流式聊天实现
python·websocket·openai·api·实时聊天·deepseek大模型·流式输出
卷心菜不卷Iris8 小时前
第1章大型互联网公司的基础架构——1.3 HTTP-DNS
网络·网络协议·http·dns·互联网大厂·http-dns·基础架构
捷米特研发一部10 小时前
EtherNet/IP转Modbus TCP:新能源风电监控与分析实用案例
网络·工业物联网·工业自动化·协议转换网关
tian-ming10 小时前
计算机网络(4)TCP断开
网络·tcp/ip·计算机网络
老赵骑摩托11 小时前
深入浅出gRPC:原理、HTTP/2协议与四种通信模式详解
网络·网络协议
Black蜡笔小新11 小时前
从中心化到点对点:视频通话SDK组件EasyRTC如何通过WebP2P技术实现低延迟通信
网络协议·音视频·p2p
乐观主义现代人11 小时前
linux系统测试网络pps、带宽和延时(方案来源于阿里云)
linux·网络·阿里云
安科瑞刘鸿鹏13 小时前
能源物联网电力计量装置功能参数介绍
运维·网络·物联网·能源