【发布时间】:2011-07-18 17:45:18
【问题描述】:
我想编写一个应用程序,将 WebSockets 与 node.js 和 socket.io 与 Django 结合使用,并将通过 Redis 共享数据(这句话中有很多流行语!)。
如果我在不同的端口(例如 5555)上运行节点,我是否能够使用 WebSocket 连接到它(或使用 socket.io 的后备方法,如长轮询等)或 @987654322 @给我问题?
如果是这样,我该如何绕过它们?
【问题讨论】:
我想编写一个应用程序,将 WebSockets 与 node.js 和 socket.io 与 Django 结合使用,并将通过 Redis 共享数据(这句话中有很多流行语!)。
如果我在不同的端口(例如 5555)上运行节点,我是否能够使用 WebSocket 连接到它(或使用 socket.io 的后备方法,如长轮询等)或 @987654322 @给我问题?
如果是这样,我该如何绕过它们?
【问题讨论】:
Socket.io 支持 JSONP 轮询,这通常用于跨域长轮询(除了 CORS 并非每个浏览器都支持)。关于 WebSockets 的跨域主题 - specification 声明如下:
服务器将主机名包含在 |Sec-WebSocket-位置|场地 它的握手,使两者 客户端和服务器可以验证 他们同意哪个主机在 使用。
您“应该”能够使用具有不同端口的 WebSocket,实际上您可能别无选择,因为其他 Web 服务器将使用 80 等标准端口来为您的基于 Django 的应用程序提供服务。如果您使用相同的域和端口,特定于浏览器的parallel connection limits 也会存在潜在问题(例如,当您尝试在同一浏览器上下文中打开多个选项卡时,您可以在 Facebook 聊天中看到这一点 - 每个选项卡都连接到在长轮询期间使用不同的子域来克服这些限制)。
【讨论】:
答案是“有时”。它非常特定于浏览器和安全策略。
假设您使用的是 Socket.IO... 我没有遇到任何问题,除了在 Opera 中它无法绕过 SOP(同源策略)规则。修复是启用 WebSockets。
【讨论】:
socket.io 确实支持跨域连接(请参阅常见问题解答)。不同的端口可以正常工作。
【讨论】:
我不确定 WebSockets,尽管 Ajax 会给您带来问题。 我相信这可以通过使用服务器端的反向代理来解决。
【讨论】: