Django Channels - 当群组成员时无法直接向频道发送消息
Django Channels - Unable To Message Channel Directly When A Member Of A Group
我的应用程序要求能够根据情况向单个频道和频道组发送消息。
但是我遇到了这个问题,如果我将我的频道添加到一个组中,我将无法再直接向他们发送消息。
这里有一些例子:
(无法发送到单个频道):
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']
}))
所以,我的问题是:这是一个错误还是我只是做错了什么?我正在考虑在 Django Channels GitHub 上开一张票,但它建议先检查 Whosebug 以确保它绝对是一个错误而不是用户错误(这是一个真实的可能性!)
我正在使用 Django 3.1 版、Django Channels 3.0.2 版和 Django Channels Redis 3.2.0 版。这是我的 Redis 设置:
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [('192.168.15.82', 6379)],
},
},
}
非常感谢任何帮助。
我不完全确定为什么,但经过一夜的睡眠和对我的代码进行一些修改后,现在似乎可以按预期工作。
这确实回答了问题,一直以来都是用户错误!
抱歉浪费您的时间,但非常感谢您尝试解决问题。
我的应用程序要求能够根据情况向单个频道和频道组发送消息。
但是我遇到了这个问题,如果我将我的频道添加到一个组中,我将无法再直接向他们发送消息。
这里有一些例子:
(无法发送到单个频道):
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']
}))
所以,我的问题是:这是一个错误还是我只是做错了什么?我正在考虑在 Django Channels GitHub 上开一张票,但它建议先检查 Whosebug 以确保它绝对是一个错误而不是用户错误(这是一个真实的可能性!)
我正在使用 Django 3.1 版、Django Channels 3.0.2 版和 Django Channels Redis 3.2.0 版。这是我的 Redis 设置:
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [('192.168.15.82', 6379)],
},
},
}
非常感谢任何帮助。
我不完全确定为什么,但经过一夜的睡眠和对我的代码进行一些修改后,现在似乎可以按预期工作。
这确实回答了问题,一直以来都是用户错误!
抱歉浪费您的时间,但非常感谢您尝试解决问题。