[英]How do I catch a WebSocket connection interruption?
在Firefox(至少)中,如果你按ESC,它将关闭所有打开的WebSockets连接。 我需要捕获断开连接并尝试重新连接一旦它再次可用。
这是我试图实现的代码的一个示例,但是我能想出的任何内容都不会捕获错误并允许我优雅地处理它。
看看代码: http : //jsfiddle.net/w5aAK/
var url = "ws://echo.websocket.org";
try {
socket = window['MozWebSocket'] ? new MozWebSocket(url) : new WebSocket(url);
socket.onopen = function(){
console.log('Socket is now open.');
};
socket.onerror = function (error) {
console.error('There was an un-identified Web Socket error');
};
socket.onmessage = function (message) {
console.info("Message: %o", message.data);
};
} catch (e) {
console.error('Sorry, the web socket at "%s" is un-available', url);
}
setTimeout(function(){
socket.send("Hello World");
}, 1000);
打开控制台并观察输出。
我在这里做错了,还是因为连接在JS脚本范围之外运行而不可能?
任何输入都会有所帮助。
谢谢!
您可以将处理程序附加到socket.onclose
事件。 当您按ESC并且连接中断时将调用它。
请参阅: http : //jsfiddle.net/w5aAK/1/
您目前无法解决的一个问题是输出到控制台的中断错误。 在我害怕的那一刻,没有办法捕获它。
你无法抓住它,这不是你的错。 这是FireFox的错误。 在这里投票:
https://bugzilla.mozilla.org/show_bug.cgi?id=712329
我亲自尝试过各种解决方案:
事件处理程序onunload onbeforeunload onclose try..catch一些js错误处理第三方服务等
你可以登录控制台你的插座,它在卸载前关闭,但FF认为不同.. :(
解决方案(没有直接回答的答案,但它的工作原理):
这是一个错误,所以你无法捕获,但这个信息不是解决方案 。 经过各种疯狂的解决方法,并试图捕捉到这个bug,我终于找到了这个工作。 如果使用socket.io来处理WebScokets,它可以使用不同的传输技术。 xhr-polling适用于Firefox。
if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) { //test for Firefox/x.x or Firefox x.x (ignoring remaining digits);
socket = io.connect('//' + node_server + '/', {
transports: ['polling']
});
} else {
socket = io.connect('//' + node_server + '/');
}
什么帮助了我 - 也可能对你有所帮助:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.