Websocket не получает сообщение от сервера django channels, хотя они подключены

В настоящее время я создаю приложение с помощью django channels.
У меня есть вебсокет, подключенный к серверу. Если посмотреть на мой терминал, кажется, что websocket успешно подключен к серверу.

HTTP GET / 200 [0.01, 127.0.0.1:62087]
HTTP GET /static/video/js/websocket.js 200 [0.00, 127.0.0.1:62087]
WebSocket HANDSHAKING /ws/video [127.0.0.1:62089]
WebSocket CONNECT /ws/video [127.0.0.1:62089]

Однако websocket не получает сообщение, отправленное с сервера.

Вот мои коды:
consumers.py

import json
from channels.generic.websocket import WebsocketConsumer
from asgiref.sync import async_to_sync

class VideoConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()
        self.send(json.dumps({'message': 'you are connected!'}))   

websocket.js

const address = 'ws://' + window.location.host + '/ws/video'
const websocket = new WebSocket(address)

const btn = document.getElementById('myButton')

websocket.onopen = (event) => {
  console.log('websocket connected!!!')
}

websocket.onmessage = (event) => {
  console.log(event.data)
}

Я хотел бы получать сообщение "Вы подключены!" на консоли браузера. Я изучил официальный документ django channels и искал решение в google, но мне не удалось решить мою проблему. Что я здесь упускаю?

Проблема не имеет ничего общего с вышеприведенными кодами.
Я решил проблему путем редактирования моего asgi.py в папке проекта.

import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.security.websocket import AllowedHostsOriginValidator
from channels.auth import AuthMiddlewareStack
import video.routing

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'VideoChat.settings')

application = ProtocolTypeRouter(
    {
        'http': get_asgi_application(),
        'websocket': AllowedHostsOriginValidator(
            AuthMiddlewareStack(URLRouter(video.routing.websocket_urlpatterns))
        )
    }
)

Как вы можете видеть, я обернул AuthMiddlewareStack(URLRouter(video.routing.websocket_urlpatterns)) с помощью AllowedHostsOriginValidator. После того, как я удалил AllowedHostsOriginValidator, как 'websocket': AuthMiddlewareStack(URLRouter(video.routing.websocket_urlpatterns)), проблема была решена идеально.

p.s: Я заметил, что вебсокет все еще может быть подключен с предыдущей настройкой. Он просто не отправляет и не получает сообщения от сервера.

Вернуться на верх