Django Websocket терпит неудачу сразу после рукопожатия при использовании PostgresSql
Я разработал приложение с помощью Django и использовал в нем каналы Django для сообщений. Мои websocket-соединения работали нормально, пока я использовал свой локальный db.sqlite3, но когда я перешел на использование PostgreSQL, размещенного на AWS RDS, я начал получать ошибку подключения:
HTTP GET /community/groups/5/ 200 [5.13, 127.0.0.1:1905]
WebSocket HANDSHAKING /ws/group/5/ [127.0.0.1:1908]
HTTP GET /AI/tools-list/ 200 [2.72, 127.0.0.1:1905]
WebSocket DISCONNECT /ws/group/5/ [127.0.0.1:1908]
WebSocket HANDSHAKING /ws/notifications/ [127.0.0.1:1913]
WebSocket DISCONNECT /ws/notifications/ [127.0.0.1:1913]
Отключено с кодом закрытия: 1006
Примечание: Иногда мой вебсокет уведомления подключается, но вебсокет группового чата никогда не подключается
Я пытался подключиться к websocket, но он продолжает терпеть неудачу
Похоже, проблема может быть связана с конфигурацией среды после перехода на AWS RDS. Попробуйте выполнить следующие действия для ее решения:
1. Конфигурация Redis
Django Channels полагается на Redis в качестве бэкенда канального уровня для управления соединениями WebSocket. Убедитесь, что Redis запущен и правильно настроен в вашем settings.py
файле:
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [('127.0.0.1', 6379)], # Replace with your Redis server host/port if needed
},
},
}
Если вы используете экземпляр Redis, размещенный в облаке, обновите поле "hosts"
соответствующим образом.
2. Конфигурация PostgreSQL
Убедитесь, что ваша база данных PostgreSQL, размещенная на AWS RDS, правильно настроена в settings.py
. Опция connect_timeout
может помочь справиться с задержками в сети, особенно в облачных средах:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'your_db_name',
'USER': 'your_db_user',
'PASSWORD': 'your_db_password',
'HOST': 'your_aws_rds_host',
'PORT': '5432',
'OPTIONS': {
'connect_timeout': 10, # Adjust as necessary
},
},
}
3. Конфигурация ASGI-сервера
Django Channels требует наличия ASGI-сервера (например, Daphne или Uvicorn) для обработки WebSocket-соединений. Убедитесь, что вы запустили сервер с помощью правильной команды:
daphne -u /path/to/your/asgi.py application
При использовании Увикорна:
uvicorn your_project.asgi:application
Кроме того, проблема может быть связана с конфигурацией балансировщика нагрузки или брандмауэра. Убедитесь, что они правильно настроены для поддержки соединений WebSocket.