相关疑难解决方法(0)

在Django频道2中向组发送消息

我完全陷入困境,我无法使用群发消息与频道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)

django redis django-channels

11
推荐指数
1
解决办法
7010
查看次数

标签 统计

django ×1

django-channels ×1

redis ×1