Ошибка при подключении веб-сокетов, когда я отправляю код на сервер
Я реализовал 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