【发布时间】:2011-09-10 23:07:19
【问题描述】:
我对 websockets 和 socket.io 有疑问。当我尝试使用 socket.io 连接到我的节点服务器时,它最初使用 websockets 进行连接,但不久之后又恢复为 jsonp-polling。
这是我连接时节点服务器的输出:
8 Jun 07:01:15 - Initializing client with transport "websocket"
8 Jun 07:01:19 - Initializing client with transport "jsonp-polling"
8 Jun 07:01:19 - Client 16630339180119336 connected
这发生在 Chrome 和 Safari 中。 我已经更新到最新的 socket.io 版本 0.6.17 并且正在运行节点 0.4.7。
我已尝试按照 github 和 SO 上的建议删除我的 cookie 和缓存,但问题仍然存在。此外,当我尝试强制使用 websockets 时,它永远不会与会话 ID 完全连接。
有人有什么想法吗?
【问题讨论】:
-
既然升级到 jsonp 就意味着你以跨域的方式使用 socket.io。尝试在同一个域上运行您的 websocket 服务器
-
我在不同的 IP 上运行它,因为我需要在端口 80 上运行节点,这会导致我的 Web 服务器与 Apache 发生冲突。 websockets/flashsockets不能跨域使用吗?
-
websockets 和 flashsockets 跨域工作,您可以在 socket.io src 中看到它们都在
xdomainCheck函数中返回一个毯子true -
可能与代理有关,如果涉及代理,则与客户端无关。 Apache 是否充当此 socket.io 服务器的代理?
-
最后一条评论可能是原因。如果您的节点在 Apache 或 Nginx 之类的代理后面运行,则您无法运行 WebSocket(除非您专门为 TCP 代理打了补丁)。
标签: javascript node.js websocket socket.io