Web Sockets简介
WebSocket 实现了客户端和服务器之间基于单个 TCP 连接的实时全双工通信。在这篇文章中,我们将向你展示如何用 Python 搭建一个简单的 WebSocket 服务器,以及如何使用 Python 客户端和流行的命令行工具,比如 websocat 和 wscat 来测试它。
用 Python 搭建 WebSocket 服务器
我们使用 websockets 库,它提供了基于 asyncio 的易用 WebSocket 服务器实现。下面是一个简单的服务器(Python 代码),监听端口 9090,并打印接收到的带时间戳的消息:
import asyncio
import websockets
from datetime import datetime
async def handler(websocket):
print(f"[{datetime.now().isoformat()}] 客服端连接:{websocket.remote_address}")
try:
async for message in websocket:
print(f"[{datetime.now().isoformat()}] 接收到: {message}")
## echo back
await websocket.send(message)
except websockets.exceptions.ConnectionClosed:
print(f"[{datetime.now().isoformat()}] 客服下线了。")
async def main():
async with websockets.serve(handler, "0.0.0.0", 9090):
print(f"[{datetime.now().isoformat()}] WebSocket 服务器监听 ws://0.0.0.0:9090")
await asyncio.Future() # 一直运行
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
print(f"\n[{datetime.now().isoformat()}] 服务器停止了。")
你需要先安装 websockets 包:
pip3 install websockets
然后运行:
python ws_server.py
就会看到:
[2025-08-08T12:12:07.868442] WebSocket 服务器监听 ws://0.0.0.0:9090
[2025-08-08T12:12:13.871834] 客服端链接:(‘127.0.0.1’, 34598)
编写一个简单的 Python 测试客户端
要测试服务器,你可以写一个 Python 客户端,连接服务器,发送消息,并可选地等待响应:
import asyncio
import websockets
from datetime import datetime
async def test_client():
uri = "ws://localhost:9090"
try:
async with websockets.connect(uri) as websocket:
message = "您好!"
print(f"[{datetime.now().isoformat()}] 发送消息: {message}")
await websocket.send(message)
try:
response = await asyncio.wait_for(websocket.recv(), timeout=5)
print(f"[{datetime.now().isoformat()}] 接受到: {response}")
except asyncio.TimeoutError:
print(f"[{datetime.now().isoformat()}] 超时,没有收到响应.")
except Exception as e:
print(f"链接失败: {e}")
if name == "main":
asyncio.run(test_client())
运行:
$ python3 dummy_ws_client.py
[2025-08-08T12:15:08.950121] 发送消息: 您好!
[2025-08-08T12:15:08.951689] 接受到: 您好!
使用现有命令行工具测试
除了自己写客户端,你还可以使用现有工具与 WebSocket 服务器交互。
websocat
websocat 是一个专为 WebSocket 通信设计的命令行工具,类似于传统的 netcat,但支持 WebSocket。
安装
On Debian/Ubuntu
sudo apt install websocat
在 macOS (Homebrew)
brew install websocat
使用
websocat ws://localhost:9090
你可以直接输入消息发送到服务器,服务器返回的消息会显示在终端(echo)
wscat
wscat 是基于 Node.js 的 WebSocket 命令行客户端。
通过 npm 安装
npm install -g wscat
用法
wscat -c ws://localhost:9090
netcat (nc)
虽然 nc 很适合测试原始的 TCP 或 UDP 连接,但它不支持 WebSocket 协议,不能完成握手和消息帧封装,因此无法直接用于 WebSocket 服务器测试。
浏览器开发者工具
你也可以打开浏览器的 JavaScript 控制台,交互式创建 WebSocket 客户端:
let ws = new WebSocket("ws://localhost:9090");
ws.onmessage = (event) => console.log("Received:", event.data);
ws.onopen = () => ws.send("Hello from browser");
总结
使用 Python 的 websockets 库,搭建 WebSocket 服务器非常简单。测试也很方便,你可以用自定义 Python 客户端,或者用 websocat、wscat 这些现有工具。浏览器控制台则适合快速试验。请避免用 nc 进行 WebSocket 测试,因为它不支持该协议。
英文:How to Set Up and Test a WebSocket Server in Python with Existing CLI Tools?
本文一共 554 个汉字, 你数一下对不对.上一篇: 英国抓捕比特币ATM主犯: 所有与法币挂钩的加密活动必须获得许可
下一篇: 延时满足: 坚持与时间的力量
