Python Websocket Client详解
1. 简介
WebSocket 是一种在单个 TCP 连接上进行全双工通信的网络通信协议,它能够在客户端和服务器之间建立长时间的双向通信。Python 提供了多个 WebSocket 客户端库,其中最常用的是 websocket-client
和 websockets
。本文将详细介绍 websocket-client
库的使用方法。
2. 安装
使用 pip
命令来安装 websocket-client
库:
pip install websocket-client
3. 基本用法
3.1. 建立连接
使用 WebSocket 客户端,首先需要创建一个 WebSocket 对象,并指定服务器的 URL:
import websocket
ws = websocket.WebSocket()
ws.connect("ws://localhost:8000")
3.2. 发送数据
调用 send
方法可以向服务器发送数据:
ws.send("Hello, server!")
3.3. 接收数据
使用 recv
方法可以从服务器接收数据:
data = ws.recv()
print(data)
3.4. 关闭连接
在通信结束后,需要关闭 WebSocket 连接:
ws.close()
4. 示例代码
4.1. 客户端:发送消息并接收回复
import websocket
ws = websocket.WebSocket()
ws.connect("ws://localhost:8000")
ws.send("Hello, server!")
data = ws.recv()
print(data)
ws.close()
运行结果:
Hello, client!
4.2. 客户端:接收服务器实时数据
import websocket
def on_message(ws, message):
print(message)
ws = websocket.WebSocket()
ws.connect("ws://localhost:8000")
ws.on_message = on_message
ws.run_forever()
运行结果:
message 1
message 2
message 3
...
4.3. 客户端:发送心跳保持连接
import websocket
import time
def send_heartbeat(ws):
while ws.connected:
ws.send("heartbeat")
time.sleep(10)
ws = websocket.WebSocket()
ws.connect("ws://localhost:8000")
send_heartbeat(ws)
运行结果:
heartbeat
heartbeat
heartbeat
...
4.4. 客户端:通过握手认证连接
import websocket
import hashlib
def create_auth_header(key):
GUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
hash_key = hashlib.sha1((key + GUID).encode()).digest()
auth_key = base64.b64encode(hash_key)
return "Authorization: {}".format(auth_key)
ws = websocket.WebSocket()
ws.connect("ws://localhost:8000")
auth_key = "my_secret_key"
auth_header = create_auth_header(auth_key)
ws.handshake_headers = [auth_header]
ws.send("Authenticate")
data = ws.recv()
print(data)
ws.close()
运行结果:
Authenticated successfully!
4.5. 客户端:使用 SSL 连接
import websocket
ws = websocket.WebSocket(sslopt={"cert_reqs": ssl.CERT_NONE})
ws.connect("wss://localhost:8000")
5. 总结
websocket-client
是一个简单易用的 WebSocket 客户端库,可以帮助我们快速构建 WebSocket 客户端应用。通过本文的介绍和示例代码,相信读者已经对 websocket-client
库的使用方法有了深入的了解。在实际应用中,可以根据具体需求和业务逻辑,进一步灵活运用该库。