关于IE兼容WebSocket的一个小问题,以及WebSocket异常的捕获和处理

一、IE兼容WebSocket的一个小问题

之前的项目用websocket传输实时数据,放到测试环境里的时候,反馈说收不到数据。

于是来做一下IE的兼容,在此期间干了不少蠢事。

1、IE的配置:

版本:IE 11

文档模式设置为10的时候,项目无法加载,原因不详。

2、websocketUrl的写法

!!!!以前没做过适配,也没有用过IE。

所以Chrome能运行的时候,我从来没怀疑过配置有问题。

实际上我把websocket的url写错了。

正确的写法:

var wsUrl = "ws://192.168.1.115:8083";

我的写法:

var wsUrl = "ws//:192.168.1.115:8083";

Chrome竟然可以识别并拼接这个错误的url,但IE不行。

我傻B,我错了,我有罪,我忏悔。

二、WebSocket的异常捕获和处理

websocket的连接异常是不能用try-catch代码块捕获到的,这样行不通:

	try{
		var ws = new WebSocket(wsUrl);
	}catch(exception){
		console.log("ws连接异常");
	}

连接的异常处理,要用websocket的onerror方法:

	ws.onerror = function(err) {
		console.log("提示:WebSocket 连接状态:" + ws.readyState);
		if (ws.readyState == 3) {
			console.log("=====异常:websocket连接打开或关闭失败!");
			alert("创建websocket连接失败!请检查config.js:wsUrl");
		}
	}

如果需要保证客户端和服务端的连接是存活的,就用心跳重连,实现原理很简单:
连接成功以后,客户端定时发送信息给服务器,说我还活着,你呢;
服务端收到信息,回复客户端说好的呢,我也还活着。
这样双方就能确认彼此的存在。

如果没收到心跳信息,就在onclose里面复活一下。

posted on 2021-06-02 12:09  northwest  阅读(1339)  评论(0编辑  收藏  举报

导航