为了账号安全,请及时绑定邮箱和手机立即绑定

Python websocket onclose

Python websocket onclose

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

1 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

recv() 和 send() 都会在关闭的连接上引发 websockets.exceptions.ConnectionClosed 。在那里进行清理工作。

以下是对文档中的 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())


查看完整回答
反对 回复 2023-07-05
  • 1 回答
  • 0 关注
  • 180 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信