Каналы Django и socket.io-client

Я пытаюсь использовать их в первый раз и удивляться, что я направился в правильном направлении.

Вот мои договоренности,

socket.io является оберткой вокруг websocket и возвращается к субоптимальным решениям, когда websocket недоступен.

Каналы Django могут также разговаривать с websocket.
(Я думаю, что он преобразует django в очередь сообщений как система, хотя это понимание или непонимание должно влиять на этот вопрос)

Итак, я пытаюсь использовать Django-каналы на сервере и socket.io-client на клиенте.

socket.io имеет api, который выглядит как

socket.on(type, (payload)=> {})

В то время как каналы Django имеют форму

message.reply_channel.send({ "text": json })

- это текст type socket.on(type)?

Может ли каналы Django и socket.io-client разговаривать друг с другом?

Ответ 1

Из Socket.IO README:

Примечание. Socket.IO не является реализацией WebSocket. Хотя Socket.IO действительно использует WebSocket в качестве транспорта, когда это возможно, он добавляет некоторые метаданные к каждому пакету: тип пакета, пространство имен и идентификатор подтверждения, когда требуется подтверждение сообщения. Вот почему клиент WebSocket не сможет успешно подключиться к серверу Socket.IO, а клиент Socket.IO также не сможет подключиться к серверу WebSocket (например, ws://echo.websocket.org). Пожалуйста, смотрите спецификацию протокола здесь.

Таким образом, вы не должны ожидать, что каналы будут работать напрямую с Socket.IO. Глобальная поддержка браузерами веб-сокетов составляет 93%, что, вероятно, достаточно высоко, чтобы напрямую использовать API веб-сокетов.

Ответ 2

Чтобы процитировать создателя каналов Django: https://github.com/django/channels/issues/1038

Каналы не поддерживают socket.io - это другой протокол, который не является веб-сокетом или HTTP, а слоями поверх них. Вам придется использовать сервер socket.io, если вы хотите его использовать.

Ответ 3

Вы можете использовать django-каналы с socketio в качестве потребителя и направлять трафик socketio на сервер socketio. проверить это https://github.com/ly3too/django-channels-with-socket.io