【问题标题】:Django Channels group send (exclude the data sender)Django Channels 组发送(不包括数据发送者)
【发布时间】:2018-09-06 19:14:30
【问题描述】:

我使用 Django 通道作为中间代理,它将数据从一个浏览器(父/发送者)传递到其他连接的浏览器(子/接收者)。在我的消费者中,一旦从父浏览器接收到数据,我就会执行 channel_layer.group_send(data) ,以便子浏览器稍后可以从 redis 通道获取数据。

但是,我真正想要的是传递给通道的数据应该被所有子级接收,除了父级浏览器。我的问题是,如何排除组内的数据发送者?

【问题讨论】:

  • 似乎数据发送者无论如何都会收到数据,但解决方案可能是在前端使用一些局部变量来决定发送者是否真正获得数据。

标签: django-channels


【解决方案1】:

不幸的是,django 频道不提供这样的过滤。我已经通过在chat_message函数中检查当前连接是否是发件人解决了这个问题。

    async def receive(self, text_data):
        text_data_json = json.loads(text_data)
        # Send message to room group

        await self.channel_layer.group_send(
            self.GROUP_NAME,
            {
                'type': 'chat_message',
                'data': text_data_json,
                'sender_channel_name': self.channel_name
            }
        )

    # Receive message from room group
    async def chat_message(self, event):

        # send to everyone else than the sender
        if self.channel_name != event['sender_channel_name']:
            await self.send(text_data=json.dumps(event))

【讨论】:

  • 如果我在消费者之外进行群发怎么办?如何访问频道名称?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 2014-07-28
  • 2023-03-17
  • 2018-07-29
  • 2020-05-13
  • 1970-01-01
  • 2017-06-09
相关资源
最近更新 更多