渠道消费者垃圾收集器

时间:2020-05-16 09:11:34

标签: django garbage-collection django-channels

在Websocket客户端断开连接后,消费者实例会如何处理?是否对实例进行了特定的清理,或者只是常规的垃圾回收?

是否可以重新连接到渠道使用者实例以恢复该实例的状态?

1 个答案:

答案 0 :(得分:0)

在Websocket客户端断开连接后,消费者实例会如何处理?是否对实例进行了特定的清理,或者只是常规的垃圾回收?

对于Websocket使用者,

def disconnect(self, code):应该在连接关闭的情况下调用。但是,如果您遇到异常或连接超时,则不会调用此方法。

如果您希望有更大的机会来拦截它,则可以覆盖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等