我目前遇到的问题是你们可以帮助我......
我正在使用websockets连接到自定义服务器。现在我想要集成第二个服务器IP(如果第一个服务器IP不可用)。
如何检测到由于服务器无法访问而无法建立连接?当我在我的脚本中输入错误的ws:// url时,例如Chrome会给我以下错误:
与'wss:// 1234 /'的WebSocket连接失败:连接建立错误:net :: ERR_NAME_NOT_RESOLVED
在Firefox中,它完全不同。你们有任何方法用Javascript来捕捉这个错误吗?基本上当无法访问ws:// url时,我想更改一个具有不同Server-IP的变量,并再次尝试使用此变量...
感谢您的帮助!
答案 0 :(得分:0)
感谢@orbitbot,
我正在使用一个名为jwebsocket(jwebsocket.org)的框架。我的代码基本上是这样的:
serverstate = "0";
console.log(serverstate);
function logon() {
if(serverstate == "0") {
lURL = "wss://testurl-one:9797";
} else if (serverstate == "1") {
lURL = "wss://testurl-two:9797";
}
var gUsername = "user";
var lPassword = "pass";
console.log( "Connecting to " + lURL + " and console.logging in as '" + gUsername + "'..." );
var lRes = lWSC.logon( lURL, gUsername, lPassword, {
// OnOpen callback
OnOpen: function( aEvent ) {
console.log( "jWebSocket connection established." );
},
// OnMessage callback
OnMessage: function( aEvent, aToken ) {
var lDate = "";
if( aToken.date_val ) {
lDate = jws.tools.ISO2Date( aToken.date_val );
}
console.log( "jWebSocket '" + aToken.type + "' token received, full message: '" + aEvent.data + "' " + lDate + "" );
console.log(aToken);
}
},
// OnClose callback
OnClose: function( aEvent ) {
console.log( "Disconnected from Server" );
console.log("Using next server..");
serverstate = "1";
console.log(serverstate);
console.log("Trying to connect to next server");
logon();
},
// OnClose callback
OnError: function( aEvent ) {
console.log ("Some error appeared");
}
});
console.log( lWSC.resultToString( lRes ) );
}
当然这到目前为止还可以。我的问题是我使用websockets打开连接,获取一些信息,然后再次关闭连接。
因为如果关闭服务器连接(在很多情况下我想要...),这个代码将永远被触发,我不能像那样使用它...
关于这个问题的任何其他想法?
答案 1 :(得分:0)
我得到了...对于其他感兴趣的人:
建立连接后,您会收到来自服务器的消息。因此,如果服务器不可用..那就没有消息了。所以我只是在" OnMessage"中添加了一个变量。部分..并在断开连接我检查是否收到消息。如果没有,那么服务器就不存在......如果是的话,一切正常......
答案 2 :(得分:0)
似乎没有办法解决实例化问题,即使神奇的JavaScript黑盒似乎知道新WebSocket上出现了问题。
要检测此错误,请使用以下命令:
ws = new WebSocket(server);
ws.onerror = function (evt) {
if (ws.readyState == 3) {
//Connection closed.
}
}
答案 3 :(得分:-1)
假设您的代码是这样的,
var host = 'ws://a.real.websocket.url';
var socket = new WebSocket(host);
...您只需要使用try / catch块将new WebSocket
的调用包围起来,就像这样
try {
var socket = new WebSocket(host);
} catch (e) {
// inspect e to understand why there was an error
// and connect to another url if necessary
}
话虽这么说,使用诸如Socket.IO或SockJS(https://github.com/sockjs/sockjs-client)之类的websockets库可能会更容易,然后它会将重新连接代码逻辑更改为库提供的任何内容。