Каналы 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