Sails / Socket.io websocket 被阻止 - 如何回退?

Sails / Socket.io websocket blocked - how to fall back?

我有一个 sails.js / socket.io 启用了 websocket 和轮询传输的聊天应用程序。在我的组织中,我们有一个 proxy/firewall 阻止与 ws:// 协议的连接。

当我 运行 此环境中的应用程序时,我可以看到 sails 应用程序尝试重新连接到 websocket,输出如下:

WebSocket connection to 'ws://.../socket.io/?__sails_io_sdk_version=0.11.0&__sails_io_sdk_platform=browser&__sails_io_sdk_language=javascript&EIO=3&transport=websocket' failed: WebSocket is closed before the connection is established. sails.io.js:143
Socket is trying to reconnect to Sails... -|>- (attempt #11)

如何在第 3 次尝试后让应用程序回退到轮询传输?

更新: 我刚在 socket.io 博客上找到这个:

Socket.IO never assumes that WebSocket will just work, because in practice there’s a good chance that it won’t. Instead, it establishes a connection with XHR or JSONP right away, and then attempts to upgrade the connection to WebSocket.

此外,所描述的情况一次只会发生一次,大多数情况下轮询都可以正常工作。看起来 sails 应用程序有时会跳过 XHR 连接并立即尝试 websockets。

原来我需要启用会话才能使轮询正常工作,所以这可能是我出现问题的原因。

我在 Heroku 上进行部署时遇到了同样的问题,显然他不能很好地进行轮询。

我通过强制传输 websocket 解决了这个问题。

在config/sockets中:

transports: ["websocket"]

在 sails.io.js 之后立即添加此行。因为这个文件在管道中,所以我创建了一个新文件来放置脚本:

io.sails.transports=['websocket'];

此 link 中的更多详细信息:

http://sailsjs.org/documentation/concepts/deployment/scaling