使用Django频道将消息发送到多个组

时间:2019-08-05 21:01:43

标签: python django websocket django-channels

我正在构建一个聊天应用程序。我想知道:
1)如果我当前实现聊天的方式不正确/编码实践不正确
2)如何将消息发送到多个组

基本思想如下:

  • 每个用户都连接到特定频道(... / ws /),并且属于特定组
  • 一个小组包含一个用户,一个用户只能参加一个小组
  • 当用户向另一个用户发送消息时,他们还会发送一个用户ID列表,该消息应转发给该用户ID。
  • 然后将邮件发送到不同的组

我想以有效/可扩展的方式将消息发送给那些用户。

下面是我实现聊天的当前方式,其中消息发送给一个用户(在data [userID]中仅指定1个用户)

def connect(self):
        self.room_name = self.scope['url_route']['kwargs']['room_name']
        self.room_group_name = self.room_name

        # Join room group
        async_to_sync(self.channel_layer.group_add)(
            self.room_group_name,
            self.channel_name
        )

        self.accept()

    def disconnect(self, close_code):
        async_to_sync(self.channel_layer.group_discard)(
            self.room_group_name,
            self.channel_name
        )

    def receive(self, text_data):
        print('Websocket received info!')
        data = json.loads(text_data)
        # Send the message to the specified user
        self.send_channel_message(data[userID], data['message'])

    def send_channel_message(self, group_name, message):
        async_to_sync(self.channel_layer.group_send)(
            '{}'.format(group_name), # Specify intented group
            {
                'type': 'channel_message',
                'message': message
            }
        )

    def channel_message(self, event):
        message = event['message']

        # Send message to WebSocket
        self.send(text_data=json.dumps({
            'message': message
        }))

一种实现方法是遍历聊天消息所针对的用户,并将消息逐一发送给他们。

    def receive(self, text_data):
        print('Websocket received info!')
        data = json.loads(text_data)
        # Send the message to the specified user
        for userID in data[userID]
            self.send_channel_message(userID, data['message'])

此方法是最佳编码实践吗?

是否有更好的方法来完成我想做的事情?

0 个答案:

没有答案