2012-08-12 222 views
3

我想定期嘗試打開websocket連接,直到成功。所以我每5秒嘗試一次,它似乎最初工作了大約一分鐘左右。即禁用服務器,嘗試連接,然後立即關閉readyState設置爲3,然後5秒鐘後,另一次嘗試,另一個相同的響應。但是在一分鐘或2分鐘後,它不再關閉連接,它只是掛起在連接狀態(readyState == 0)。websocket連接不關閉

function wsConnect() 
    { 
    console.log("trying to connect..."); 
    var socket = new WebSocket("wss://blahblah.com"); 
    socket.onopen=function(){console.log("open");}; 
    socket.onerror=function(){console.log("error");}; 
    socket.onclose=function(msg){console.log("close");}; 

    setTimeout(function(){console.log("RS:"+socket.readyState);socket.close();wsConnect();},5000); 
    } 

有趣的是,如果我以後,啓動服務器時,它會通過幾十個連接想必所有的連接作出導致的readyState 0排隊等候的打擊。有什麼辦法可以完全粉碎殺滅一個readystate 0連接?無法關閉它,因爲它沒有打開。

或者,我該如何定期進行連接嘗試,以便在服務器可用時連接,但在所有需要的情況下都不會用大量連接轟炸服務器?

瀏覽器:鉻

一旦它開始與readyState的應答0,甚至刷新頁面不會修復它。只有進入一個全新的領域,然後回去看似重置。

+0

歡迎使用堆棧溢出!你使用的是什麼瀏覽器? – starbeamrainbowlabs 2012-08-12 09:12:09

+0

對不起,應該說,瀏覽器是鉻。 Firefox也表現出類似的行爲。我無法相信這給了我多少麻煩,因爲這不是一件非常不尋常的事情。我只想讓瀏覽器繼續嘗試,直到服務器再次可用。我是唯一有這個問題的人嗎? – poby 2012-08-12 10:04:01

+0

也許在http://crbug.com打開一個錯誤報告將幫助 – starbeamrainbowlabs 2012-08-14 17:11:29

回答

0

我相信你不應該嘗試另一個連接,直到第一個連接關閉,然後在關閉事件中執行重新連接。這樣你就不會創建另一個連接,除非第一個連接失敗。

function wsConnect() 
{ 
    console.log("trying to connect..."); 
    var socket = new WebSocket("wss://blahblah.com"); 
    socket.onopen = function() { console.log("open"); }; 
    socket.onerror = function() { console.log("error"); }; 
    socket.onclose = function(msg) { 
     console.log("close"); 
     setTimeout(wsConnect, 5000); 
    }; 
} 
+0

Yup第一次嘗試,但問題是,一分鐘或2分鐘後,onclose不會被稱爲沒有更多的因爲它似乎只是在連接(readystate 0) – poby 2012-08-12 11:29:30