当我尝试初始化到本地主机上运行的服务器的websocket连接时,
var webSocket = new WebSocket("ws://localhost:8025/myContextRoot");在javascript中,但是服务器尚未完成启动,我得到了错误
SCRIPT12029: WebSocket错误:网络错误12029,无法与服务器建立连接
我怎么才能阻止这一切?例如,如何检查服务器是否已经启动,或者如何强制WebSocket客户端等待服务器?
发布于 2017-02-08 12:39:39
那麽:
var webSocketFactory = {
connectionTries: 3,
connect: function(url) {
var ws = new WebSocket(url);
ws.addEventListener("error", e => {
// readyState === 3 is CLOSED
if (e.target.readyState === 3) {
this.connectionTries--;
if (this.connectionTries > 0) {
setTimeout(() => this.connect(url), 5000);
} else {
throw new Error("Maximum number of connection trials has been reached");
}
}
});
}
};
var webSocket = webSocketFactory.connect("ws://localhost:8025/myContextRoot");
当您得到连接错误时,您可以执行有限数量的试运行错误来尝试重新连接。或者,您可以不断地尝试访问服务器。
发布于 2018-03-21 18:04:21
被接受的答案是完全正确的。我只想用承诺把它再扩展一点。
var wsFactory = { tryCount: 3,
connect : function(url){
var ctx = this,
ws = new WebSocket(url);
return new Promise(function(v,x){
ws.onerror = e => { console.log(`WS connection attempt ${4-ctx.tryCount} -> Unsuccessful`);
e.target.readyState === 3 && --ctx.tryCount;
if (ctx.tryCount > 0) setTimeout(() => v(ctx.connect(url)), 1000);
else x(new Error("3 unsuccessfull connection attempts"));
};
ws.onopen = e => { console.log(`WS connection Status: ${e.target.readyState}`);
v(ws);
};
ws.onmessage = m => console.log(m.data);
});
}
};
wsFactory.connect("ws://localhost:8025/myContextRoot")
.then(ws => ws.send("Hey..! This is my first socket message"))
.catch(console.log);发布于 2017-02-08 12:27:40
您不能阻止(或暂停) WebSocket启动/建立连接。WebSocket在其声明时自动与服务器建立连接。您可以做的是将所有代码放入要在成功连接上执行的onopen事件处理程序中。所以就像..。
var webSocket = new WebSocket("ws://localhost:8025/myContextRoot");
webSocket.onopen = function() {
// code you want to execute
};查看这文章,了解更多关于WebSocket的信息。
https://stackoverflow.com/questions/42112919
复制相似问题