Websocket failed in live server , WebSocket connection to 'wss://my_domain.com:8001/' failed:
Я адаптирую websocket в приложении django, оно работало, но я не знаю, что случилось, теперь оно не работает. Я использовал разный код канального уровня на живом и локальном сервере. Есть идеи по поводу этой проблемы?
notification.js
const ws_scheme = window.location.protocol == "https:" ? "wss" : "ws";
if (ws_scheme == 'wss')
ws_path = ws_scheme + '://' + window.location.host + ":8001/";
else
ws_path = ws_scheme + '://' + window.location.host;
const notificationSocket = new WebSocket(ws_path);
routing.py
import os
from decouple import config
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.security.websocket import AllowedHostsOriginValidator
from django.core.asgi import get_asgi_application
from django.urls import re_path, path
os.environ.setdefault("DJANGO_SETTINGS_MODULE", f'{config("PROJECT_NAME")}.settings')
django_asgi_app = get_asgi_application()
from chatapp.consumers import ChatConsumer
from notification.nconsumers import NotificationConsumer
application = ProtocolTypeRouter({
"http": django_asgi_app,
'websocket': AllowedHostsOriginValidator(
AuthMiddlewareStack(
URLRouter([
path('chatapp/<int:room_id>/', ChatConsumer.as_asgi()),
path('', NotificationConsumer.as_asgi()),
])
)
),
})
asgi.py
import os
import django
from decouple import config
from channels.routing import get_default_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", f'{config("PROJECT_NAME")}.settings')
django.setup()
application = get_default_application()
consumers.py
from django.conf import settings
from channels.generic.websocket import AsyncJsonWebsocketConsumer
from channels.db import database_sync_to_async
from chatapp.models import UnreadChatRoomMessages
from notification.models import Notification
class NotificationConsumer(AsyncJsonWebsocketConsumer):
async def connect(self):
await self.accept()
async def disconnect(self, code):
pass
settings.py
INSTALLED_APPS = [
'channels',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'chat',
'customer',
'notification',
'rest_framework',
'rest_framework.authtoken',
]
Я использовал это на живом сервере
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {
"hosts": [("127.0.0.1", 6379)],
},
},
}
и я использовал это как локальный сервер
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels.layers.InMemoryChannelLayer"
}
}
Установлены сопутствующие пакеты: channels 3.01 channel-redis 3.3.0