我正试图第一次使用它们并且想知道我正朝着正确的方向前进.
以下是我的理解,
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可以互相交流吗?
从Socket.IO自述文件:
注意:Socket.IO不是WebSocket实现。尽管Socket.IO确实确实在可能的情况下使用WebSocket进行传输,但它会向每个数据包添加一些元数据:当需要消息确认时,数据包类型,名称空间和ack ID。因此,WebSocket客户端将无法成功连接到Socket.IO服务器,而Socket.IO客户端也将无法连接到WebSocket服务器(例如ws://echo.websocket.org)。请在此处查看协议规范。
因此,您不应该期望Channels直接与Socket.IO一起使用。全局浏览器对websockets的支持率为93%,这可能足够高,可以直接使用websocket API。
引用django 频道的创建者:https : //github.com/django/channels/issues/1038
Channels 不支持 socket.io - 它是一种不同的协议,它不是 websockets 或 HTTP,而是它们之上的层。如果你想使用它,你必须使用 socket.io 服务器。