Каналы django через веб-сокет не работают

Я пытаюсь запустить проект мультичата из примеров каналов django на сервере. Он работает локально на компьютере с Windows, но когда я помещаю его на сервер Linux и запускаю его с помощью runserver, он не работает:

./manage.py runserver

Затем, когда я вызываю веб-сайт, он отображается правильно, но как только JS отправляет ему запрос веб-сокета, я всегда получаю этот ответ:

[2016/08/02 14:35:48] HTTP GET /chat/stream/ 404 [0.04, 127.0.0.1:40186]
....(many lines of this)

Таким образом, запрос веб-сокета обрабатывается как HTTP-запрос. Ответ должен быть таким:

[2016/08/02 16:34:45] WebSocket CONNECT /chat/stream/ [127.0.0.1:60250]

Я понятия не имею, где это происходит не так. Маршрутизация http по сравнению с websocket, кажется, выполняется где-то глубоко внутри daphne/twisted/...

Настройки моего канала (если это вообще поможет):

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgi_redis.RedisChannelLayer",
        "CONFIG": {
            "hosts": [(redis_host, 62031)],
        },
        "ROUTING": "multichat.routing.channel_routing",
    },
}

Перекрученная версия 16.2.0.

Любая помощь или подсказка, в каком направлении смотреть, очень ценятся.


person ger.s.brett    schedule 02.08.2016    source источник
comment
Привет, я столкнулся с той же проблемой. Вы можете помочь?   -  person sandeep    schedule 19.05.2020


Ответы (2)


Некоторые вопросы/предложения, которые приходят на ум:

Linux-сервер для разработки или производства? т.е. Работает ли HTTP-сервер или просто DJANGO? (В первом случае вы не начинаете с «./manage runserver».)

«Затем, когда я вызываю веб-сайт, он отображается правильно ...»

Это потому, что номера портов разные для запросов? 40186 против 60250.

Вы получаете 404, например. URL-адрес не найден. Это может быть либо ответ HTTP-сервера, либо от DJANGO.

person DA--    schedule 03.08.2016
comment
Я запускаю это с помощью runserver, но django-channels переопределяет команду runserver своей собственной (которая запускает daphne и рабочих). Порт действительно может быть проблемой - каждый неудачный запрос показывает другой порт - и те порты, к которым я не могу получить доступ. Но я понятия не имею, откуда берутся эти номера портов. - person ger.s.brett; 03.08.2016
comment
На самом деле отображаемые номера портов должны быть бессмысленными: поскольку этот запрос работает: [2016/08/03 07:47:51] HTTP GET /static/css/style.css 200 [0.02, 127.0.0.1:53294] Проблема кажется будь то он обрабатывает запрос ws как http - person ger.s.brett; 03.08.2016

Можете выложить полный лог?

Попробуйте запустить сервер с помощью daphne и запустите worker.

daphne multichat.asgi:channel_layer --port 80 --bind 0.0.0.0 -v2 
python manage.py runworker -v2 

Используйте что-то вроде супервизора, чтобы сделать это лучше, чтобы перезапустить их в случае сбоя.

person ahumblenerd    schedule 17.08.2016