Django Channels -无法在群组成员中直接发送消息



我在我的应用程序中有一个需求,即能够根据情况向单个通道和通道组发送消息。

我遇到了一个问题,如果我把我的频道添加到一个组,我就不能再直接给他们发消息了。

下面是一些例子:

(无法发送到单个通道):

class NonWorkingExampleConsumer(WebsocketConsumer):
def connect(self):
self.group_name = 'group'
async_to_sync(self.channel_layer.group_add)(
self.group_name,
self.channel_name
)

self.accept()

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

def receive(self, text_data):
async_to_sync(self.channel_layer.send)(
self.channel_name,
{
'type' : 'test',
'message' : 'Hello World!'
}
)

def test(self, event):
self.send(text_data=json.dumps({
'message' : event['message']
}))

(能够发送到单个通道):

class WorkingExampleConsumer(WebsocketConsumer):
def connect(self):       
self.accept()

def disconnect(self, close_code):
pass

def receive(self, text_data):
async_to_sync(self.channel_layer.send)(
self.channel_name,
{
'type' : 'test',
'message' : 'Hello World!'
}
)

def test(self, event):
self.send(text_data=json.dumps({
'message' : event['message']
}))

所以,我的问题是:这是一个bug还是我只是做错了什么?我正在考虑在Django Channels GitHub上开一个票,但它建议先检查StackOverflow,以确保它绝对是一个bug,而不是用户错误(这是一个真正的可能性!)

我使用的Django版本3.1,Django频道版本3.0.2和Django频道Redis版本3.2.0。以下是我的Redis设置:

CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [('192.168.15.82', 6379)],
},
},
}

感谢您的帮助。

我不完全确定为什么,但是经过一个晚上的睡眠和对我的代码的一些修修补补之后,现在看起来像预期的那样工作。

这确实回答了这个问题,一直都是用户错误!

很抱歉浪费你的时间,但是非常感谢你试图解决这个问题。

最新更新