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.

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