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