我完全陷入困境,我无法使用群发消息与频道2合作!我已经按照我能找到的所有教程和文档进行了操作,但是我还没有找到问题所在.我现在要做的是让一个特定的URL在访问时应该向一个名为"events"的组广播一条简单的消息.
首先,这里是我在Django中使用的相关和当前设置:
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
'hosts': [('localhost', 6379)],
},
}
}
ASGI_APPLICATION = 'backend.routing.application'
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'corsheaders',
'channels',
'channels_redis',
'backend.api'
]
Run Code Online (Sandbox Code Playgroud)
接下来,这是我的EventConsumer,以一种非常基本的方式扩展JsonWebsocketConsumer.所有这些都是在收到消息时回显,这有效!因此,简单的send_json响应应该到达,它只是组播不起作用.
class EventConsumer(JsonWebsocketConsumer):
groups = ["events"]
def connect(self):
self.accept()
def disconnect(self, close_code):
print("Closed websocket with code: ", close_code)
self.close()
def receive_json(self, content, **kwargs):
print("Received event: {}\nFrom: {}\nGroups:
{}".format(content,
self.channel_layer,
self.groups))
self.send_json(content)
def event_notification(self, event):
self.send_json(
{
'type': 'test',
'content': event
}
)
Run Code Online (Sandbox Code Playgroud)
这是我想要触发广播的URL的URL配置:
项目urls.py
from …Run Code Online (Sandbox Code Playgroud)