關於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里面復活一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM