gpt4 book ai didi

Python websockets 发送到客户端并保持连接

转载 作者:行者123 更新时间:2023-11-28 22:14:41 24 4
gpt4 key购买 nike

我正在使用 python websockets:https://websockets.readthedocs.io/

他们有一个简单的客户端/服务器示例,其中服务器将客户端的输入回显一次。代码如下所示:

客户端:

# WS client example

import asyncio
import websockets

async def hello():
async with websockets.connect(
'ws://localhost:8765') as websocket:
name = input("What's your name? ")

await websocket.send(name)
print(f"> {name}")

greeting = await websocket.recv()
print(f"< {greeting}")

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

服务器端:

# WS server example

import asyncio
import websockets

async def hello(websocket, path):
name = await websocket.recv()
print(f"< {name}")

greeting = f"Hello {name}!"

await websocket.send(greeting)
print(f"> {greeting}")

start_server = websockets.serve(hello, 'localhost', 8765)

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

我只想调整服务器端,以便它在套接字连接上执行以下操作:

  1. 向客户端发送确认消息。例如您好客户!请等待您的数据。
  2. 保持连接。
  3. 处理一些数据需要一些时间。
  4. 数据处理完成后,在现有的 websocket 连接上通知客户端。例如您的数据在这里!

python websockets 文档没有执行此操作的代码示例。

最佳答案

要保持连接打开,请不要在处理完第一条消息后终止处理程序。例如,您可以有一个无限循环,它将继续处理传入的消息,直到客户端关闭连接:

async def hello(websocket, path):
while True:
try:
name = await websocket.recv()
except websockets.ConnectionClosed:
print(f"Terminated")
break

print(f"< {name}")
greeting = f"Hello {name}!"

await websocket.send(greeting)
print(f"> {greeting}")

async 中,您可以await 建议的任何长时间运行的操作here .

然而,您需要以类似的方式调整服务器端和客户端。您的客户端也会在收到第一条消息后终止。

关于Python websockets 发送到客户端并保持连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53331127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com