2015-06-14 56 views
2

我正在嘗試使用Jetty 9.3.0 RC建立Web Socket連接。Jetty Web Socket超時

function checkDetails(port) { 

    var ws = new WebSocket("ws://localhost:9995/application"); 

    ws.onopen = function(event) { 
     console.log("onopen called..."); 
    } 
    ws.onerror = function(event){ 
     console.log('onerror called...'); 
    } 

    ws.onmessage = function(event) { 
     console.log("onmessage called..." + event.data); 
    } 

    ws.onclose = function(event) { 
     console.log("onclose called..." + port); 
     console.log(event); 
     ws.close(); 
    } 
    } 

的代碼工作正常,如果用於創建Web Socket連接的端口是沒有被其他進程佔用

var ws = new WebSocket("ws://localhost:9995/application"); 

但在情況下,如果端口是由一些其它進程佔用,然後不斷嘗試,直到端口被釋放與該端口進行連接。

我需要提供一個超時,以便如果端口在3分鐘內沒有響應,那麼Web Socket應該釋放(或停止監聽)端口並顯示控制檯日誌。

請讓我知道最簡單的方法來實現這一點。

+0

你能澄清你的問題的哪些部分涉及到客戶端,以及服務器的哪些部分? –

+0

這篇文章中提到的一切都是指客戶...... – user182944

回答

2

從客戶端連接到某個Web套接字。如果端口(您的情況爲9995)可用於連接,則意味着某些程序(在服務器模式下)正在偵聽和響應。做一些事情 - 用一些數據來回答。因此,如果存在並且答案的話可以連接到這樣的程序,或者如果沒有端口9995的服務器偵聽器,則可以連接到此程序。當您通過某個其他進程說「端口已被佔用」時,表示此進程存在並且應答。而且這個過程會隨着它的設計而作出迴應。所以,從客戶端來說,你所做的一切都是連接到現有的正在運行的進程,它在服務器模式下監聽這個端口。就是這樣,就是這樣。但是,如果我們忽略你的意見,即OP只是關於客戶端,那麼我的第一個建議是查看服務器配置並檢查它是否處於多線程模式,並且可以一次回覆並處理多個請求。你所描述的看起來像你有單線程的進程,它只處理一個請求,並且在當前完成時可以回答下一個請求。這聽起來像「過程佔用」。但由於評論堅持認爲我們只是在談論客戶端,那麼這種猜測就沒有必要了。