用Python和现有CLI工具测试开发Web Sockets应用


Web Sockets简介

WebSocket 实现了客户端和服务器之间基于单个 TCP 连接的实时全双工通信。在这篇文章中,我们将向你展示如何用 Python 搭建一个简单的 WebSocket 服务器,以及如何使用 Python 客户端和流行的命令行工具,比如 websocatwscat 来测试它。

websocket-full-duplex 用Python和现有CLI工具测试开发Web Sockets应用 Python Python 学习笔记 程序设计 编程 计算机

WebSocket 连接(全双工通信)

用 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 客户端,或者用 websocatwscat 这些现有工具。浏览器控制台则适合快速试验。请避免用 nc 进行 WebSocket 测试,因为它不支持该协议。

英文:How to Set Up and Test a WebSocket Server in Python with Existing CLI Tools?

本文一共 554 个汉字, 你数一下对不对.
用Python和现有CLI工具测试开发Web Sockets应用. (AMP 移动加速版本)
上一篇: 英国抓捕比特币ATM主犯: 所有与法币挂钩的加密活动必须获得许可
下一篇: 延时满足: 坚持与时间的力量

扫描二维码,分享本文到微信朋友圈
a633ae7bd60cdb93244172a10eb18418 用Python和现有CLI工具测试开发Web Sockets应用 Python Python 学习笔记 程序设计 编程 计算机

评论