Python WebSocket入门

Python WebSocket入门

今天我们来聊聊WebSocket,这是一种在客户端和服务器之间进行双向通信的协议,特别适合实时应用。准备好了吗?让我们一起开始吧!

什么是WebSocket?

WebSocket是一个网络通信协议,提供全双工通信渠道,允许服务器主动向客户端推送数据。与HTTP请求相比,WebSocket在连接建立后可以持续进行数据交换,非常适合聊天应用、在线游戏等实时场景。

步骤 1:安装WebSocket库

在Python中使用WebSocket,你可以使用 websockets库。首先,确保你已经安装了这个库:

pip install websockets

步骤 2:创建一个简单的WebSocket服务器

现在,我们来创建一个简单的WebSocket服务器。打开你的Python编辑器,创建一个新的文件 server.py,并输入以下代码:

import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        print(f"Received: {message}")
        await websocket.send(f"Echo: {message}")

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

asyncio.get_event_loop().run_until_complete(start_server)
print("Server is running on ws://localhost:8765")
asyncio.get_event_loop().run_forever()

代码解析:

  • websockets.serve:创建一个WebSocket服务器,接收来自客户端的连接。
  • echo函数:接收消息并返回一个回显(Echo)消息。

步骤 3:创建一个简单的WebSocket客户端

接下来,我们创建一个简单的WebSocket客户端来测试我们的服务器。在同一目录下,创建一个新的文件 client.py,并输入以下代码:

import asyncio
import websockets

async def hello():
    async with websockets.connect("ws://localhost:8765") as websocket:
        await websocket.send("Hello, Server!")
        response = await websocket.recv()
        print(f"Received from server: {response}")

asyncio.get_event_loop().run_until_complete(hello())

代码解析:

  • websockets.connect:连接到指定的WebSocket服务器。
  • send方法:向服务器发送消息。
  • recv方法:接收服务器的响应。

步骤 4:运行服务器和客户端

首先,在终端中运行你的WebSocket服务器:

python server.py

接着,在另一个终端窗口中运行WebSocket客户端:

python client.py

你应该能看到服务器输出的消息和客户端接收到的响应:

Server is running on ws://localhost:8765
Received: Hello, Server!

步骤 5:扩展功能

广播消息

你可以扩展服务器的功能,让它支持广播给所有连接的客户端。更新 server.py 中的代码如下:

connected = set()

async def echo(websocket, path):
    connected.add(websocket)
    try:
        async for message in websocket:
            print(f"Received: {message}")
            for conn in connected:
                await conn.send(f"Echo: {message}")
    finally:
        connected.remove(websocket)

客户端发送多个消息

你也可以修改客户端代码,让它发送多个消息:

async def hello():
    async with websockets.connect("ws://localhost:8765") as websocket:
        for i in range(5):
            await websocket.send(f"Message {i}")
            response = await websocket.recv()
            print(f"Received from server: {response}")

小提示

  • WebSocket与HTTP的结合使用:可以先用HTTP进行身份验证,然后升级到WebSocket。
  • 注意处理异常情况,确保连接的稳定性和错误处理。

结论

现在你已经成功入门WebSocket,创建了一个简单的WebSocket服务器和客户端。WebSocket非常适合构建实时应用,继续探索更多功能,开启你的实时通信之旅吧!🚀


Python WebSocket入门
http://localhost:8090//archives/202407171138
作者
QiuLingYan
发布于
2024年07月29日
许可协议