我第一次尝试使用它们并且想知道我正朝着正确的方向前进。
以下是我的理解,
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可以互相通话吗?
答案 0 :(得分:5)
来自Socket.IO README:
注意:Socket.IO不是WebSocket实现。尽管Socket.IO确实在可能的情况下使用WebSocket作为传输,但它会为每个数据包添加一些元数据:数据包类型,命名空间和需要消息确认时的确认ID。这就是为什么WebSocket客户端无法成功连接到Socket.IO服务器,而Socket.IO客户端也无法连接到WebSocket服务器(如ws://echo.websocket.org)。请参阅协议规范here。
因此,您不应期望Channels直接使用Socket.IO。 Global browser support for websockets is at 93%,可能足以直接使用websocket API。
答案 1 :(得分:0)
引用creator of django channels:https://github.com/django/channels/issues/1038
Channels不支持socket.io-这是一个不同的协议,不是websockets或HTTP,而是位于它们之上的层。如果要使用socket.io服务器,则必须使用它。