Django频道和socket.io-client

eug*_*ene 12 django socket.io

我正试图第一次使用它们并且想知道我正朝着正确的方向前进.

以下是我的理解,

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 })

是"文本" typesocket.on(type)

Django渠道和socket.io-client可以互相交流吗?

Chr*_*lor 6

从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


Gri*_*ees 5

引用django 频道创建者https : //github.com/django/channels/issues/1038

Channels 不支持 socket.io - 它是一种不同的协议,它不是 websockets 或 HTTP,而是它们之上的层。如果你想使用它,你必须使用 socket.io 服务器。