要使用 Python 实现一个 WebSocket 服务器并接收和发送数据,可以使用 websockets
库。这个库提供了一个简单的方式来创建 WebSocket 服务器和客户端。
首先,你需要安装 websockets
库。你可以使用以下命令来安装:
pip install websockets
下面是一个简单的 WebSocket 服务器实现,它可以接收来自客户端的消息并将其广播给所有连接的客户端。
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()
connected_clients
:这是一个集合,用于存储所有当前连接的客户端。handle_client
:这是处理每个客户端连接的异步函数。每当有新的客户端连接时,这个函数会被调用。websocket
:表示与客户端的连接。通过它,服务器可以接收和发送消息。async for message in websocket
:这是一个异步循环,用于接收客户端发送的消息。await asyncio.wait([...])
:将接收到的消息广播给所有连接的客户端。websockets.serve()
:启动 WebSocket 服务器,监听指定的 IP 地址和端口。asyncio.get_event_loop().run_forever()
:运行事件循环,保持服务器运行。你可以使用浏览器或任何 WebSocket 客户端工具(如 WebSocket King 或命令行工具 wscat
)来测试这个服务器。
wscat
测试如果你已经安装了 wscat
,可以通过以下命令连接到服务器:
npx wscat -c ws://localhost:8765
然后你可以在终端中输入消息,服务器会将其广播给所有连接的客户端。
如果你想编写一个 WebSocket 客户端来连接上面的服务器,可以使用以下代码:
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())
只实现接收到消息后打印出来
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 删除。