Django channels and socket.io-client



这是我第一次尝试使用它们,我想知道我是否朝着正确的方向前进。

这是我的理解,

插座。IO是websocket的包装,当websocket不可用时,IO会退回到次优解决方案。

Django通道也可以调用websocket。(我认为它将django转换成一个类似消息队列的系统。尽管这种理解或误解会影响这个问题)

所以我试图在服务器和套接字上使用Django通道。Io-client .

插座。IO的API看起来像

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

而Django的通道有一个形式的

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

socket.on(type)的"文本"type ?

可以Django通道和套接字。Io-client相互交谈?

来自套接字。IO自述:

注意:插座。IO不是WebSocket实现。尽管插座。在可能的情况下,IO确实使用WebSocket作为传输,它为每个数据包添加一些元数据:数据包类型、名称空间和需要消息确认时的ack id。这就是WebSocket客户端不能成功连接到Socket的原因。IO服务器和套接字。IO客户端将无法连接到WebSocket服务器(如ws://echo.websocket.org)。请参阅此处的协议规范。

所以,你不应该期望通道直接与Socket.IO一起工作。全球浏览器对websocket的支持是93%,这可能足以直接使用websocket API。

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

Channels不支持socket。io -这是一个不同的协议,不是websockets或HTTP,而是在它们之上的层。你得用插座。IO server .

最新更新