渠道消费者垃圾收集器

问题描述 投票:0回答:1

websocket 客户端断开连接后,消费者实例会发生什么?是否对实例进行了任何特定的清理,或者只是定期收集垃圾?

是否可以重新连接到通道消费者实例以恢复该实例的状态?

django garbage-collection django-channels
1个回答
0
投票

websocket 客户端断开连接后,消费者实例会发生什么?是否对实例进行了任何特定的清理,或者只是常规的垃圾收集?

def disconnect(self, code): 对于 websocket,消费者应该在连接关闭时被调用。但是,如果出现异常或连接超时,则不会被调用。

如果你想有更大的机会拦截这个函数,你可以改写 async def __call__ 方法,并将 await super().__call__(...) 中的try catch来捕获任何异常并对其采取行动。

async def __call__(*args, **kwargs):
   try:
      await super().__call__(*args, **kwargs)
   finally:
      # do some very fast cleanup here      

是否可以重新连接到一个通道消费者实例来恢复该实例的状态?

如果你想在它们之间共享状态,你可以考虑使用。

  • 用户会话(只要它是服务器端的持久性)。
  • 记载
  • 其他一些存储层,如redis等
© www.soinside.com 2019 - 2024. All rights reserved.