WebSockets(或AJAX长轮询等)可以在与原始HTTP请求不同的端口上运行吗?

Ank*_*kit 6 ajax node.js socket.io

我想编写一个使用带有node.js和socket.io的WebSockets与Django结合使用的应用程序,并将通过Redis共享数据(该句中有很多流行语!).

如果我在不同的端口(例如,5555)上运行节点,我是否可以使用WebSocket(或使用socket.io的回退方法,如长轮询等)连接到它,或者相同的原始策略会给我问题?

如果是这样,我怎么能绕过它们呢?

yoj*_*o87 5

Socket.io支持JSONP轮询,它通常用于跨域长轮询(除了每个浏览器都不支持的CORS).关于WebSockets的跨域主题 - 规范声明如下:

服务器在| Sec-WebSocket-Location |中包含主机名 握手的字段,以便客户端和服务器都可以验证他们是否同意正在使用的主机.

您"应该"能够使用具有不同端口的WebSockets,事实上您可能没有其他选择,因为其他Web服务器将使用像80这样的标准端口来为您的基于Django的应用程序提供服务.如果您使用相同的域和端口,浏览器特定的并行连接限制也可能存在问题(例如,当您尝试在同一浏览器上下文中打开多个选项卡时,您可以在Facebook聊天中看到此信息 - 每个选项卡都连接到长轮询期间不同的子域克服这些限制).