我想编写一个使用带有node.js和socket.io的WebSockets与Django结合使用的应用程序,并将通过Redis共享数据(该句中有很多流行语!).
如果我在另一个端口(例如5555)上运行节点,我是否可以使用WebSocket连接它(或使用socket.io的后备方法,如长轮询等)或same origin policy会给我带来问题吗?
如果是这样,我怎么能绕过它们呢?
Socket.io支持JSONP轮询,它通常用于跨域长轮询(除了
CORS,每个浏览器都不支持).关于WebSockets的跨域主题 –
specification声明如下:
The server includes the hostname in
the |Sec-WebSocket-Location| field
of its handshake,so that both the
client and the server can verify
that they agree on which host is in
use.
您“应该”能够使用具有不同端口的WebSockets,事实上您可能没有其他选择,因为其他Web服务器将使用像80这样的标准端口来为您的基于Django的应用程序提供服务.如果您使用相同的域和端口,则浏览器特定的parallel connection limits也可能存在问题(例如,当您尝试在同一浏览器上下文中打开多个选项卡时,您可以在Facebook聊天中看到此信息 – 每个选项卡都连接到不同的子域在长期轮询期间克服这些限制).