6

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

如果我在不同的端口(例如 5555)上运行节点,我是否能够使用 WebSocket(或使用socket.io的后备方法,如长轮询等)连接到它,或者相同的来源策略是否会给我问题?

如果是这样,我该如何绕过它们?

4

4 回答 4

5

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

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

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

于 2011-03-19T16:36:06.177 回答
3

答案是“有时”。它非常特定于浏览器和安全策略。

假设您使用的是 Socket.IO... 我没有遇到任何问题,除了在 Opera 中它无法绕过 SOP(同源策略)规则。修复是启用 WebSockets。

于 2011-03-19T23:51:38.827 回答
2

socket.io确实支持跨域连接(参见常见问题解答)。不同的端口可以正常工作。

于 2011-03-19T13:03:37.830 回答
1

我不确定 WebSockets,尽管 Ajax 会给你带来问题。我相信它可以通过使用服务器端的反向代理来解决。

于 2011-03-19T12:39:57.247 回答