【问题标题】:Sails / Socket.io websocket blocked - how to fall back?Sails / Socket.io websocket 被阻塞 - 如何回退?
【发布时间】:2015-11-20 02:56:28
【问题描述】:

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

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

WebSocket 连接到 'ws://.../socket.io/?__sails_io_sdk_version=0.11.0&__sails_io_sdk_platform=browser&__sails_io_sdk_language=javascript&EIO=3&transport=websocket' 失败: WebSocket 在连接建立之前关闭。 Sails.io.js:143
Socket 正在尝试重新连接到 Sails... -|>-(尝试 #11

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

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

Socket.IO 从不假设 WebSocket 会正常工作,因为在 练习很有可能不会。相反,它建立 立即与 XHR 或 JSONP 建立连接,然后尝试 升级到 WebSocket 的连接。

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

【问题讨论】:

    标签: websocket socket.io sails.js


    【解决方案1】:

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

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

    在配置/套接字中:

    transports: ["websocket"]
    

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

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

    此链接中的更多详细信息:

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

    【讨论】:

    • 嗨。从我的问题可以看出,我不能使用 websockets,所以强制它不是解决方案。
    • 重点是避免出现问题的传输,在您的情况下,强制传输进行轮询应该会有所帮助。
    • 感谢您的指点,但我仍然不想强制传输,我只是希望它回退以防它对某些用户不起作用。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-10-19
      • 1970-01-01
      • 2013-11-16
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多