我正在使用Django通道作为中间代理,该代理将数据从一个浏览器(父/发送者)传递到其他连接的浏览器(子/接收者)。在我的消费者中,一旦从父浏览器接收到数据,我就执行channel_layer.group_send(data),以便子浏览器稍后可以从redis通道获取数据。
但是,我真正想要的是传递给该通道的数据应该由除父级浏览器之外的所有所有子级接收。我的问题是,如何在组中排除数据发送者?
答案 0 :(得分:0)
不幸的是,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))