【问题标题】:Socket.io - invalid HTTP status code on SOME browsersSocket.io - 某些浏览器上的 HTTP 状态代码无效
【发布时间】:2014-09-06 08:24:34
【问题描述】:

在正常工作几周后,我们的 Socket.io 开始在一些浏览器上出现错误。我已经尝试更新到最新的 Socket.io 版本,我已经在不同的机器上尝试了我们的设置,我已经尝试了各种机器,它似乎可以在 大多数 没有明确模式的浏览器上工作其中的工作。

这些错误会在第二个间隔出现:

OPTIONS https://website.com/socket.io/?EIO=2&transport=polling&t=1409760272713-52&sid=Dkp1cq0lpKV75IO8AdA3  socket.io-1.0.6.js:2

XMLHttpRequest cannot load https://website.com/socket.io/?EIO=2&transport=polling&t=1409760272713-52&sid=Dkp1cq0lpKV75IO8AdA3. Invalid HTTP status code 400 

我们落后于亚马逊的 ELB,Socket.io 轮询,因为 ELB 路由器不支持 WebSockets。

【问题讨论】:

    标签: node.js socket.io polling


    【解决方案1】:

    我发现了导致这个的问题,真是出乎意料...

    这个问题来自于使用负载平衡服务,比如 AWS ELB(独立的 EC2 应该没问题)和 Heroku,他们的基础设施不完全支持 Socket.io 功能。 AWS ELB 完全不支持 WebSockets,而且 Heroku 的路由器对于 Socket.io 来说是垃圾,即使与 socket.io-redis 结合使用也是如此。

    当你使用单个服务器时,问题是隐藏的,但是一旦你开始集群,你就会遇到问题。我的应用程序上的一个 Heroku dyno 工作正常,然后问题开始出现在开发之外的生产中,当时我们不使用多个服务器。我们尝试在 ELB 上使用粘性负载平衡,但即便如此,我们仍然遇到同样的问题。

    当 socket.io 返回 400 错误时,在这种情况下,它表示“此会话不存在并且您从未完成握手”,因为您在集群中的另一台服务器上完成了握手。

    对我来说,解决方案只是为我的 Web 应用程序专用一个 EC2 实例来处理 Socket.io。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-19
      • 2013-11-16
      • 2013-11-14
      • 2011-04-13
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      相关资源
      最近更新 更多