gpt4 book ai didi

javascript - Python websockets onclose

转载 作者:行者123 更新时间:2023-12-02 19:16:13 27 4
gpt4 key购买 nike

在 javascript 中,我们有 WebSocket.onclose() 用于在服务器关闭 websocket 连接时执行一些操作。当客户端设备关闭连接时,有没有办法在 Python 服务器中执行相同的操作?服务器使用 websockets 模块本身使用 websockets.serve() 方法运行。 .Connected.ConnectionClosed 都不是 WebSocketServerProtocol 的属性(或者错误说)。任何帮助将不胜感激。

最佳答案

recv() 和 send() 都会在关闭的连接上引发 websockets.exceptions.ConnectionClosed。在那里处理你的清理工作。参见 https://websockets.readthedocs.io/en/stable/howto/cheatsheet.html

这里是对文档中的 websocket web 示例的轻微修改:

import asyncio
import datetime
import random
import websockets

async def time(websocket, path):
while True:
now = datetime.datetime.utcnow().isoformat() + "Z"
try:
await websocket.send(now)
except websockets.exceptions.ConnectionClosed:
print("Client disconnected. Do cleanup")
break
await asyncio.sleep(random.random() * 3)

start_server = websockets.serve(time, "127.0.0.1", 5678)

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

示例客户端:

import asyncio
import websockets

async def hello():
uri = "ws://localhost:5678"
count = 5
async with websockets.connect(uri) as websocket:
while count > 0:
greeting = await websocket.recv()
print(f"< {greeting}")
count = count - 1

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

关于javascript - Python websockets onclose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63683332/

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