2017-02-08 167 views
0

當我嘗試初始化檢查WebSocket的服務器正在運行(在本地主機上)

var webSocket = new WebSocket("ws://localhost:8025/myContextRoot"); 
在javascript

一個WebSocket連接到本地主機上運行的服務器,但是服務器還沒有完成啓動然而,我得到錯誤

SCRIPT12029: WebSocket Error: Network Error 12029, A connection with the server could not be established

我該如何防止這種情況?即我該如何檢查服務器是否已經啓動,或者如何強制WebSocket客戶端等待服務器?

回答

4

什麼:

var webSocketFactory = { 
 
    connectionTries: 3, 
 
    connect: function(url) { 
 
    var self = this; 
 

 
    var ws = new WebSocket(url); 
 
    ws.addEventListener("error", e => { 
 
     // readyState === 3 is CLOSED 
 
     if (e.target.readyState === 3) { 
 
     self.connectionTries--; 
 

 
     if (self.connectionTries > 0) { 
 
      setTimeout(() => self.connect(url), 5000); 
 
     } else { 
 
      throw new Error("Maximum number of connection trials has been reached"); 
 
     } 
 

 
     } 
 
    }); 
 
    } 
 
}; 
 

 
var webSocket = webSocketFactory.connect("ws://localhost:8025/myContextRoot");

當你得到一個連接錯誤,你可以做試錯誤的數量有限的嘗試重新連接。或者你可以無休止地嘗試訪問服務器。

+0

它工作的很棒!謝啦 :) –

1

您無法阻止(或擱置)WebSocket啓動/建立連接。 WebSocket在聲明時自動與服務器建立連接。你可以做的就是把你所有的代碼放在onopen事件處理程序中,你想在成功連接時執行它。所以它會像...

var webSocket = new WebSocket("ws://localhost:8025/myContextRoot"); 
webSocket.onopen = function() { 
    // code you want to execute 
}; 

查看this文章知道更多關於WebSocket。

+0

如何在執行'var webSocket = new WebSocket()''之前檢查websocket服務器是否已經運行?這可能嗎? – Jakob

+0

服務器是否在運行(在後端)並不重要。客戶端將在您首次聲明'var webSocket = new WebSocket()時連接(或嘗試連接)到服務器' – m87

1

因此,如果服務器未啓動,協議無法被服務器查詢,唯一的選擇是試錯。

或者您可以讓WebSocket服務器創建一個簡單的文本文件,其中包含啓動時間戳,您的網絡空間目錄中的JavaScript可以檢索它並嘗試建立連接。您可以使用XMLHttpRequest檢索文本文件。

相關問題