欢迎访问宙启技术站
智能推送

Python中使用Websockets实现实时通信的方法

发布时间:2024-01-02 15:25:35

Python中使用Websockets实现实时通信可以通过第三方库websockets来实现。下面是一个使用例子,包括服务端和客户端的实现。

首先,需要安装websockets库:

$ pip install websockets

### 服务端

import asyncio
import websockets

# 定义处理客户端消息的逻辑
async def handle_message(websocket, path):
    async for message in websocket:
        # 处理从客户端接收到的消息
        # 此处仅简单地返回同样的消息给客户端
        await websocket.send(message)

# 创建WebSocket服务端并启动
start_server = websockets.serve(handle_message, 'localhost', 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

上述代码中,我们使用websockets.serve()方法创建一个WebSocket服务端,并指定要监听的地址和端口号。handle_message函数定义了如何处理从客户端接收到的消息,这里我们仅简单地将收到的消息原样返回给客户端。

async for message in websocket语句用于循环接收客户端发送的消息,每次接收到消息后会执行下面的处理逻辑。

最后两行代码用于启动WebSocket服务器,并一直运行,不断接收和处理客户端发来的消息。

### 客户端

import asyncio
import websockets

# 定义客户端消息的处理逻辑
async def handle_message(message):
    print(message)

# 定义客户端发送消息的逻辑
async def send_message():
    uri = "ws://localhost:8765"  # WebSocket服务端地址
    async with websockets.connect(uri) as websocket:
        while True:
            # 从控制台读取输入
            message = input("Enter message: ")
            # 发送消息给服务端
            await websocket.send(message)
            # 接收服务端的消息
            response = await websocket.recv()
            # 处理服务端的消息
            await handle_message(response)
            # 如果输入'bye'则结束通信
            if message == 'bye':
                break

# 启动客户端
asyncio.get_event_loop().run_until_complete(send_message())

上述代码中,我们使用websockets.connect()方法创建一个WebSocket客户端,并指定连接的地址。然后通过input()函数从控制台读取输入的消息,并通过websocket.send()方法将消息发送给服务端。

使用await websocket.recv()方法接收服务端的消息,并使用handle_message函数处理接收到的消息。

最后通过判断输入的消息是否为'bye'来结束通信。

运行客户端代码后,可以在控制台输入消息并实时发送给服务端,同时接收服务端实时返回的消息。

以上就是使用websockets库实现Python中的WebSocket实时通信的方法及示例。通过这个例子,你可以简单了解WebSocket的工作原理和如何使用Python实现实时通信。