Django频道和socket.io-client

时间:2016-10-20 08:38:10

标签: 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 })

type的“文字”socket.on(type)

Django频道和socket.io-client可以互相通话吗?

2 个答案:

答案 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 channelshttps://github.com/django/channels/issues/1038

  

Channels不支持socket.io-这是一个不同的协议,不是websockets或HTTP,而是位于它们之上的层。如果要使用socket.io服务器,则必须使用它。