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
我有一个 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