Node.js Socket.io-某些浏览器上的HTTP状态代码无效

Node.js Socket.io-某些浏览器上的HTTP状态代码无效,node.js,socket.io,polling,Node.js,Socket.io,Polling,几周工作正常后,我们的Socket.io开始在一些浏览器上出现错误。我尝试过更新到最新的Socket.io版本,我在不同的机器上尝试过我们的设置,我尝试过各种机器,它似乎在大多数浏览器上都能工作,但没有明确的工作模式 这些错误在第二个间隔出现: OPTIONS https://website.com/socket.io/?EIO=2&transport=polling&t=1409760272713-52&sid=Dkp1cq0lpKV75IO8AdA3 socket.

几周工作正常后,我们的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路由器不支持WebSocket,因此我们在轮询时落后于Amazon的ELB,Socket.io。

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

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

当您使用单个服务器时,问题是隐藏的,但是一旦您开始集群,就会出现问题。我的应用程序中只有一个Heroku dyno运行良好,然后问题开始出现在开发阶段的生产中,当时我们没有使用多个服务器。我们在ELB上尝试了粘性负载平衡,即使在那时,我们仍然有同样的问题

当socket.io返回400个错误时,在本例中,它表示“此会话不存在,您从未完成握手”,因为您在群集中的另一台服务器上完成了握手

我的解决方案就是为我的web应用专门提供一个EC2实例来处理Socket.io