如何优雅地处理 Daphne websockets 的自动断开连接
How to gracefully handle auto disconnect of Daphne websockets
达芙妮有参数--websocket_timeout
link。如文档中所述,
--websocket_timeout WEBSOCKET_TIMEOUT
Maximum time to allow a websocket to be connected. -1 for infinite.
套接字已断开连接,无法进行进一步的通信。但是,客户端不会收到断开连接事件,因此无法正常处理。我的客户如何知道套接字是否断开连接?我不想(在客户端)保留一个计时器,也不想继续重新检查它。
这就是我部署应用程序的方式
daphne -b 0.0.0.0 -p 8000 --websocket_timeout 1800 app.asgi:application
套接字每 30 分钟自动断开连接,但客户端永远不会知道这一点。
正确的做法是什么??
更新
试图在连接关闭前发送一个事件。我正在覆盖我的 websocket_disconnect
处理程序,它在断开连接之前发送 json。但是,它不会发送事件。
class Consumer(AsyncJsonWebsocketConsumer):
async def websocket_disconnect(self, message):
"""Over-riding."""
print('Inside websocket_disconnect consumer')
await self.send_json(
"event": "disconnecting..."
)
await super().websocket_disconnect(message)
我不确定这是一个需要解决的问题。客户端确信在 X 分钟不活动后它将断开连接,其中 X 由服务器确定。它不确定在那之前不会发生。所以无论如何你都需要连接处理代码。
虽然保持空闲连接看起来很脏,但我无法想象它会消耗大量资源。
您认为客户不知道的前提是错误的。当您注册 onclose 处理程序时,客户端会收到一个断开连接事件并可以相应地采取行动。
达芙妮有参数--websocket_timeout
link。如文档中所述,
--websocket_timeout WEBSOCKET_TIMEOUT
Maximum time to allow a websocket to be connected. -1 for infinite.
套接字已断开连接,无法进行进一步的通信。但是,客户端不会收到断开连接事件,因此无法正常处理。我的客户如何知道套接字是否断开连接?我不想(在客户端)保留一个计时器,也不想继续重新检查它。
这就是我部署应用程序的方式
daphne -b 0.0.0.0 -p 8000 --websocket_timeout 1800 app.asgi:application
套接字每 30 分钟自动断开连接,但客户端永远不会知道这一点。
正确的做法是什么??
更新
试图在连接关闭前发送一个事件。我正在覆盖我的 websocket_disconnect
处理程序,它在断开连接之前发送 json。但是,它不会发送事件。
class Consumer(AsyncJsonWebsocketConsumer):
async def websocket_disconnect(self, message):
"""Over-riding."""
print('Inside websocket_disconnect consumer')
await self.send_json(
"event": "disconnecting..."
)
await super().websocket_disconnect(message)
我不确定这是一个需要解决的问题。客户端确信在 X 分钟不活动后它将断开连接,其中 X 由服务器确定。它不确定在那之前不会发生。所以无论如何你都需要连接处理代码。
虽然保持空闲连接看起来很脏,但我无法想象它会消耗大量资源。
您认为客户不知道的前提是错误的。当您注册 onclose 处理程序时,客户端会收到一个断开连接事件并可以相应地采取行动。