首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一个基本的 WebSocket 服务器和客户端的python实现

一个基本的 WebSocket 服务器和客户端的python实现

原创
作者头像
JQ实验室
发布2025-08-06 15:52:25
发布2025-08-06 15:52:25
54500
代码可运行
举报
文章被收录于专栏:都到8月了都到8月了
运行总次数:0
代码可运行

要使用 Python 实现一个 WebSocket 服务器并接收和发送数据,可以使用 websockets 库。这个库提供了一个简单的方式来创建 WebSocket 服务器和客户端。

安装依赖

首先,你需要安装 websockets 库。你可以使用以下命令来安装:

代码语言:bash
复制
pip install websockets

示例代码:WebSocket 服务器

下面是一个简单的 WebSocket 服务器实现,它可以接收来自客户端的消息并将其广播给所有连接的客户端。

WebSocket 服务器代码
代码语言:python
代码运行次数:0
运行
复制
import asyncio
import websockets

# 用于存储所有连接的客户端
connected_clients = set()

# 处理客户端连接的异步函数
async def handle_client(websocket, path):
    # 将新连接的客户端添加到集合中
    connected_clients.add(websocket)
    try:
        async for message in websocket:
            print(f"Received message: {message}")
            
            # 向所有连接的客户端广播消息
            if connected_clients:
                await asyncio.wait([client.send(message) for client in connected_clients])
    except Exception as e:
        print(f"Error: {e}")
    finally:
        # 当客户端断开连接时,从集合中移除
        connected_clients.remove(websocket)

# 启动 WebSocket 服务器
start_server = websockets.serve(
    handle_client,
    "0.0.0.0",  # 监听所有IP地址
    8765         # 使用端口8765
)

print("WebSocket server started on ws://0.0.0.0:8765")
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

解释

  1. connected_clients:这是一个集合,用于存储所有当前连接的客户端。
  2. handle_client:这是处理每个客户端连接的异步函数。每当有新的客户端连接时,这个函数会被调用。
  3. websocket:表示与客户端的连接。通过它,服务器可以接收和发送消息。
  4. async for message in websocket:这是一个异步循环,用于接收客户端发送的消息。
  5. await asyncio.wait([...]):将接收到的消息广播给所有连接的客户端。
  6. websockets.serve():启动 WebSocket 服务器,监听指定的 IP 地址和端口。
  7. asyncio.get_event_loop().run_forever():运行事件循环,保持服务器运行。

测试 WebSocket 服务器

你可以使用浏览器或任何 WebSocket 客户端工具(如 WebSocket King 或命令行工具 wscat)来测试这个服务器。

使用 wscat 测试

如果你已经安装了 wscat,可以通过以下命令连接到服务器:

代码语言:bash
复制
npx wscat -c ws://localhost:8765

然后你可以在终端中输入消息,服务器会将其广播给所有连接的客户端。

示例代码:WebSocket 客户端

如果你想编写一个 WebSocket 客户端来连接上面的服务器,可以使用以下代码:

代码语言:python
代码运行次数:0
运行
复制
import asyncio
import websockets

async def connect_to_server():
    async with websockets.connect("ws://localhost:8765") as websocket:
        print("Connected to server")
        
        # 发送消息到服务器
        await websocket.send("Hello from client!")
        
        # 接收服务器的响应
        response = await websocket.recv()
        print(f"Received from server: {response}")

# 运行客户端
asyncio.get_event_loop().run_until_complete(connect_to_server())

服务端代码简化版

只实现接收到消息后打印出来

代码语言:python
代码运行次数:0
运行
复制
import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        print(message)

start_server = websockets.serve(echo, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

总结

  • 服务器使用 websockets.serve() 启动,并监听指定的端口。
  • 每个客户端连接由 handle_client 函数处理。
  • 服务器可以接收来自客户端的消息,并将其广播给所有连接的客户端。
  • 客户端可以使用 websockets.connect() 连接到服务器,并发送和接收消息。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装依赖
  • 示例代码:WebSocket 服务器
    • WebSocket 服务器代码
  • 解释
  • 测试 WebSocket 服务器
    • 使用 wscat 测试
  • 示例代码:WebSocket 客户端
  • 服务端代码简化版
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档