在服务器端而不是客户端进行客户端连接管理

问题描述

我正在使用django-channels 2中的AsyncConsumer。我正在尝试让服务器管理要保留的连接以及声明哪些连接已断开和脱机。 如您在下面看到的,我现在正在使客户端网络套接字在8秒后将“ IAM-ALIVE”事件发送到服务器。每个客户都会这样做。服务器将向客户端发送回响应,以便客户端无法从服务器获得响应的情况下将其状态保持为“联机”或“脱机”。

async def websocket_receive(self,event):
    recieved_text = event.get('text',None)
    if recieved_text is not None:
        recieved_dict = json.loads(recieved_text)
        recieved_type = recieved_dict.get('type',None)

        if recieved_type is not None:
            if recieved_type.upper() == 'JOIN-ROOM': #Client is trying to join room
                await self.handle_join_room(recieved_dict)

            elif recieved_type.upper() == 'IAM-ALIVE': #Client is connected
                await self.channel_layer.send(
                    self.channel_name,{
                        'type':'individual_send',"text":  json.dumps({
                            'type': 'you-are-alive'
                            })
                    }
                )

                if not self.updatingConnectionListFlag:
                    self.updatingConnectionListFlag = True
                    ## Update this channel's last_seen time.
                    await self.update_last_seen_time(self.channel_name)

                    ##Delete the channels which haven't been seen for given time.
                    tmp_discard_list = await self.delete_orphan_channels()

                    if tmp_discard_list:
                        await self.handle_user_left_room(tmp_discard_list)
                    self.updatingConnectionListFlag = False

我认为让所有客户端发送这些事件以检查其是否连接不是一个好主意。我希望服务器在后台进行无限循环,以执行此连接管理。

我已经阅读了有关此类事情的一些帖子,但我不确定它们是否也对我有益。因为我有一些疑问。所有客户端将只有一个无限循环,还是在连接时为每个客户端创建一个无限循环?如果可以在这两种情况之间进行选择,那么哪一种更适合在聊天应用程序中使用,在这种情况下,需要为许多客户提供服务,同时确保他们不会因失去连接时间太长而错误地失去连接(接收“脱机”事件)。过程连接。

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)