Python websocket onclose

Vis*_* DS 3 javascript python websocket

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

clo*_*her 7

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()
Run Code Online (Sandbox Code Playgroud)

客户端示例:

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())
Run Code Online (Sandbox Code Playgroud)