如果无法建立Websocket连接,请执行其他操作

时间:2015-03-07 14:00:32

标签: javascript jquery websocket

我目前遇到的问题是你们可以帮助我......

我正在使用websockets连接到自定义服务器。现在我想要集成第二个服务器IP(如果第一个服务器IP不可用)。

如何检测到由于服务器无法访问而无法建立连接?当我在我的脚本中输入错误的ws:// url时,例如Chrome会给我以下错误:

与'wss:// 1234 /'的WebSocket连接失败:连接建立错误:net :: ERR_NAME_NOT_RESOLVED

在Firefox中,它完全不同。你们有任何方法用Javascript来捕捉这个错误吗?

基本上当无法访问ws:// url时,我想更改一个具有不同Server-IP的变量,并再次尝试使用此变量...

感谢您的帮助!

4 个答案:

答案 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库可能会更容易,然后它会将重新连接代码逻辑更改为库提供的任何内容。