Ошибка соединения WebSocket при создании приложения для чата с помощью Django
Я работаю над приложением для чата, которое является веб-клоном Whatsapp. Я застрял с соединением websocket, так как оно не может подключиться к указанному адресу. Я получаю ошибку WebSocket connection to 'ws://127.0.0.1:8000/ws/2/' failed:
. Указанный url - это потому, что я использую идентификатор пользователя для создания имени комнаты в файле consumers.py.
.
Вот часть файла consumers.py:
class PersonalChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
my_id = self.scope['user'].id
other_user_id = self.scope['url_route']['kwargs']['id']
if int(my_id) > int(other_user_id):
self.room_name = f'{my_id}-{other_user_id}'
else:
self.room_name = f'{other_user_id}-{my_id}'
self.room_group_name = 'chat_%s' % self.room_name
await self.channel_layer.group_add(
self.room_group_name,
self.channel_name
)
Внутри файла asgi.py у меня есть такой код;
application = ProtocolTypeRouter({
'websocket': AuthMiddlewareStack(
URLRouter([
path('ws/<int:id>/', PersonalChatConsumer)
])
)
})
Также здесь приведена часть javascript-файла, обрабатывающего подключение по websocket:
const id = JSON.parse(document.getElementById('json-username').textContent);
const message_username = JSON.parse(document.getElementById('json-message-username').textContent);
const socket = new WebSocket(
'ws://'
+ window.location.host
+ '/ws/'
+ id
+ '/'
);
Сообщение об ошибке в консоли VsCode гласит Not Found: /ws/2/
.
Также здесь находится файл urls:
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include(('accounts.urls', 'accounts'), namespace='accounts')),
path('', index, name='home'),
path('<str:username>/', chatPage, name='chat'),
]
Любая помощь будет высоко оценена. Спасибо
Наконец-то мне удалось решить эту проблему. Я понял, что все работало нормально, кроме сервера redis. Я решил эту проблему, запустив redis-server напрямую вместо использования docker. Вот ссылка на вопрос, который дал мне решение: Способ избежать Docker на каналах Django