2014-09-03 68 views
0

就在工作好幾周後,我們的Socket.io開始在某些瀏覽器上噴出錯誤。我已經嘗試更新到最新的Socket.io版本,我試過我們在不同的機器上安裝,我試過各種機器,它似乎在大多數瀏覽器上工作,沒有明確的工作模式。Socket.io - 某些瀏覽器上的無效HTTP狀態代碼

這些錯誤出現在第二區間:

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的。

回答

1

我發現,已造成這個問題,這是真的很意外......

這個問題來自於使用負載均衡服務,如AWS ELB(獨立EC2應該罰款雖然)和Heroku的,其基礎設施完全不支持Socket.io功能。 AWS ELB flat out將不支持WebSockets,Heroku的路由器對於Socket.io來說是垃圾,即使與socket.io-redis一起使用。

當您使用單個服務器時隱藏問題,但只要您開始集羣,您就會遇到問題。我的應用程序中的一個Heroku dyno工作正常,然後當開發中出現問題時,我們不使用多個服務器。我們在ELB上嘗試了粘性負載平衡,即便如此,我們仍然遇到同樣的問題。

當socket.io返回400個錯誤時,在這種情況下,它會說「此會話不存在,並且您從未完成握手」,因爲您完成了羣集中不同服務器上的握手。

我的解決方案只是專門爲我的web應用程序使用一個EC2實例來處理Socket.io。

相關問題