2017-02-08 164 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检索文本文件。

相关问题