Я работаю над демонстрационным приложением для чата в рамках процесса обучения работе с каналами Django и WebSockets. Моя цель — установить связь в реальном времени с помощью WebSocket, но я столкнулся с проблемой, из-за которой происходит сбой подключения к WebSocket. В консоли браузера я постоянно вижу сообщение об ошибке, указывающее, что соединение WebSocket не может быть установлено. Несмотря на настройку необходимых потребителей, маршрутизации и конфигураций ASGI, соединение WebSocket, похоже, не происходит, и я не могу продолжить работу с функциями обмена сообщениями в реальном времени. В консоли мне показывает:
WebSocket connection to 'ws://127.0.0.1:8000/ws/friends/' failed:
(anonymous) @ friends/:12
Это мой файл consumers.py
from channels.layers import get_channel_layer
from channels.generic.websocket import AsyncWebsocketConsumer
class ChatConsumer(AsyncWebsocketConsumer):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.channel_layer = get_channel_layer()
async def connect(self):
self.room_name = self.scope['url_route']['kwargs']['room_name']
self.room_group_name = 'chat%s' % self.room_name
await self.channel_layer.group_add(
self.room_group_name,
self.channel_name
)
await self.accept()
async def disconnect(self, close_code):
await self.channel_layer.group_discard(
self.room_group_name,
self.channel_name
)
Это мой файл routing.py
from django.urls import path
from . import consumers
websocket_urlpatterns = [
path('ws//',consumers.ChatConsumer.as_asgi())
]
и мой файл asgi.py
import os
from django.core.asgi import get_asgi_application
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter,URLRouter
import chatapp.routing
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
application = ProtocolTypeRouter({
'http':get_asgi_application(),
'websocket':AuthMiddlewareStack(
URLRouter(
chatapp.routing.websocket_urlpatterns
)
)
})
Код внешней части следующий:
{{ chatroom.slug|json_script:"json-chatroomname" }}
const chatRoomname = JSON.parse(document.getElementById('json-chatroomname').textContent)
const chatSocket = new WebSocket(
'ws://'
+window.location.host+'/ws/'
+chatRoomname
+'/'
)
chatSocket.onmessage = function(e){
console.log('This is a message')
}
chatSocket.onclose = function(e){
console.log('Socket closed')
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ion-failed
Не удалось подключиться к веб-сокету каналов Django ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение