2015-12-28 131 views
0

在Google Chrome瀏覽器中,我無法與我的服務器建立套接字連接。 獲取有時這在控制檯(黃色):AngularJS:在Google Chrome中建立連接之前,WebSocket已關閉

WebSocket connection to 'ws://www.mywebsite.com/socket.io/?EIO=3&transport=websocket&sid=u_g7zfNFByPmMnnfAAAH' failed: WebSocket is closed before the connection is established. 

並在此之後(但不總是):響應

POST http://www.mywebsite.com/socket.io/?EIO=3&transport=polling&t=1451326926027-5&sid=8MlGZTYdQ256ECoAAAAJ 400 (Bad Request) 

聞聽此事:

{"code":1,"message":"Session ID unknown"} 

我要刷新很多次,所以頁面可以連接。 在Firefox中,大部分時間相同的代碼工作正常,但有時我會得到它。

Firefox can't establish a connection to the server at ws://www.mywebsite.com/socket.io/?EIO=3&transport=websocket&sid=tDQpo6ynbIik6FUUAAAS. 

instance = new WebSocket(uri); 

socket.io.js (line 5310) 

The connection to ws://www.mywebsite.com/socket.io/?EIO=3&transport=websocket&sid=tDQpo6ynbIik6FUUAAAS was interrupted while the page was loading. 

instance = new WebSocket(uri); 

如果我在本地運行我的服務器,代碼在瀏覽器中工作正常,沒有任何問題。 我的服務器位於運行在nginx代理下的node.js中。我按照配置配置插座支持nginx的: -

proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "upgrade"; 

我怎麼能保證我的WebSocket將連接而無需刷新頁面? 我使用btford以角度實現套接字。

回答

1

可我知道,如果有動態會話或動態令牌一樣與服務器每次調用得到改變它,那麼你可能會遇到這個問題,捕捉你的動態會話,並在URL追加或您的網站託管服務器

它添加到頭部,它可以幫助

WS://www.mywebsite。COM; JSESSIONID = rbgeger377377

更新回答

我不知道很多關於Ubuntu的服務器,

但在網絡插座,最初的握手會中發生的會話將被創建並自始至終維持在所有的請求和響應

如果您的會話得到一些分鐘內到期,很可能下一屆會議將取代舊的會議仍然你正在做的請求

如果您有兩個併發服務,則Javascript是異步的,

一旦會話發生變化,到下一個請求開始發送時,會話將不會在您的請求中可用,但您的服務器認爲它已經發生了變化,那就是爲什麼你得到的錯誤是這樣認爲的,

我不知道背後的Firefox和Chrome的確切原因,如果你禁用鉻緩存,機會多多下一個線程都失敗

在Javascript中一個很好的功能,可能是是雙向綁定,一旦你在響應頭中獲得了新的會話,如果你將它映射到url,它會自動綁定到下一個請求,你唱就可以避免這個問題是這麼認爲的

通過設定的時間間隔可幫助您調試問題時清除Cookie和緩存

+0

,託管服務器是Ubuntu的64位服務器,以及如何獲得這個動態會話?如果這是問題,那麼爲什麼代碼大部分時間在Chrome上工作,並在鉻上有時 – vineetv2821993

+0

我更新了我的答案,評論這似乎不是很好:),更好的運氣:) –

+0

謝謝@krishnakumar sekar。讓我檢查這是否工作:)。我會盡快更新。 – vineetv2821993

相關問題