Ошибка при подключении веб-сокетов, когда я отправляю код на сервер

Я реализовал Django Channel для обмена сообщениями между пользователями группы в режиме реального времени.

На локальной системе все работает нормально, но когда я отправляю это на сервер, то получаю ошибку WebSocket соединение с 'ws://nailsent.developmentrecords.com/ws/chat/13/' не удалось: Error during WebSocket handshake: Неожиданный код ответа: 404 (anonymous) @ 13:465

Это мой скрипт

Consumer.py

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "nailSent_porject.settings")
from channels.layers import get_channel_layer
import django
django.setup()
from channels.generic.websocket import AsyncWebsocketConsumer
import json
from asgiref.sync import sync_to_async
from .models import Message, Group, User
# Now you can access settings like this
class ChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        self.group_id = self.scope['url_route']['kwargs']['group_id']
        self.group_name = f'{self.group_id}'
        # Join  group
        await self.channel_layer.group_add(
            self.group_name,
            self.channel_name
        )
        await self.accept()
        url_pattern = self.scope['url_route']['route']
        print(" this is a url=========================", url_pattern)

    async def disconnect(self, close_code):
        # Leave room group
        await self.channel_layer.group_discard(
            self.group_name,
            self.channel_name
        )
    
    async def receive(self, text_data):
        try:
            data = json.loads(text_data)
            message = data['message']
            username = data['username']
            group =  data['group_id']
            image  = data['image']
            # Send message to room group
            await self.save_message(message,username,group)
            await self.channel_layer.group_send(
                self.group_name,
                {
                    'type': 'chat_message',
                    'message': message,
                    'username': username,
                    'image':image,
                }
            )
        except json.JSONDecodeError:
            self.send(data=json.dumps({
                'error': 'Invalid JSON format.'
            }))
        except Exception as e:
            self.send(data=json.dumps({
                'error': str(e)
            }))

    # Receive message from room group
    async def chat_message(self, event):
        try:
            message = event['message']
            username =  event['username']
            image = event['image']
            # sending message to websocket
            await self.send(text_data=json.dumps({
                'message': message,
                'username': username,
                'image':image,
            }))
        except KeyError:
            print("Error: 'message' key not found in event:", event)
        except Exception as e:
            print("Error in chat_message:", e)
    @sync_to_async
    def save_message(self, message,username, group_id):
        user = User.objects.get(username=username)
        group = Group.objects.get(id=group_id)
        Message.objects.create(content=message,sender=user,group=group)

routing.py

from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from django.urls import re_path
from . import consumers

websocket_urlpatterns = [
    re_path(r'wss/chat/(?P<group_id>[^/]+)/$', consumers.ChatConsumer.as_asgi()),
    ]

application = ProtocolTypeRouter({
    'websocket': AuthMiddlewareStack(
        URLRouter(
            websocket_urlpatterns
        )
    ),
})

я также создал файл с именем Daphne.socket и daphne.service, но dephne запускается на сервере, но выдает мне вышеуказанную ошибку

Попробуйте добавить расположение /ws/ в конфигурационный файл nginx для вашего проекта. Например:

location /ws/ {
    proxy_pass http://localhost:8000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

В данном примере соединение websocket находится в порту 8000

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