2024-10-01 11:39:37 发布
网友
在javascript中,我们有WebSocket.onclose()用于在服务器关闭websocket连接时执行一些操作。当客户端设备关闭连接时,在Python服务器中是否有同样的方法?服务器是使用websockets模块本身和websockets.serve()方法运行的。两者都是.Connected&.ConnectionClosed不是WebSocketServerProtocol的属性(或者错误是这样说的)。任何帮助都将不胜感激
WebSocket.onclose()
websockets
websockets.serve()
.Connected
.ConnectionClosed
WebSocketServerProtocol
recv()和send()都将在关闭的连接上引发websockets.exceptions.ConnectionClosed。在那里处理你的清理工作。见https://websockets.readthedocs.io/en/stable/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())
recv()和send()都将在关闭的连接上引发websockets.exceptions.ConnectionClosed。在那里处理你的清理工作。见https://websockets.readthedocs.io/en/stable/cheatsheet.html
下面是对文档中websocket web示例的一个轻微修改:
示例客户端:
相关问题 更多 >
编程相关推荐