當在用戶端和伺服器之間建立了連線,就會從Web Socket範例觸發open
事件。在通訊期間發生的錯誤會生成錯誤。它是在onerror
事件的幫助下標記和處理的。在發生錯誤之後總是會終止連線。
當通訊之間發生錯誤時會觸發onerror
事件。事件onerror
之後是連線終止,這是一個關閉事件。
一個好的做法是始終告知使用者意外錯誤並嘗試重新連線它們。
var wsUri = "wss://echo.websocket.org/";
var socket = new WebSocket(wsUri);
socket.onclose = function(event) {
console.log("Error occurred.");
// Inform the user about the error.
var label = document.getElementById("status-label");
label.innerHTML = "Error: " + event;
}
在處理錯誤時,必須考慮內部和外部引數。
想象一下,當使用者正在使用網路應用時,突然網路連線在任務中間變得無法響應。在現代本機桌面和移動應用程式中,檢查網路可用性是一項常見任務。
最常見的方法是向一個應該啟動的網站發出HTTP請求(例如,http://www.google.com)。 如果請求成功,則桌面或移動裝置知道存在活動連線。類似地,HTML可使用XMLHttpRequest
來確定網路可用性。
但是,HTML5使它變得更加容易,並引入了一種檢查瀏覽器是否可以接受Web響應的方法。這是通過導航器物件實現的 -
if (navigator.onLine) {
alert("網路連線正常");
}else {
alert("網路連線好像出現問題");
}
離線模式表示裝置未連線或使用者已從瀏覽器工具列中選擇離線模式。以下是如何通知使用者網路不可用並嘗試在發生WebSocket關閉事件時重新連線 -
socket.onclose = function (event) {
// Connection closed.
// Firstly, check the reason.
if (event.code != 1000) {
// Error code 1000 means that the connection was closed normally.
// Try to reconnect.
if (!navigator.onLine) {
alert("You are offline. Please connect to the Internet and try again.");
}
}
}
接收錯誤訊息的範例
以下程式說明如何使用Web通訊端顯示錯誤訊息 -
<!DOCTYPE html>
<html>
<meta charset = "utf-8" />
<title>WebSocket Test</title>
<script language = "javascript" type = "text/javascript">
var wsUri = "ws://echo.websocket.org/";
var output;
function init() {
output = document.getElementById("output");
testWebSocket();
}
function testWebSocket() {
websocket = new WebSocket(wsUri);
websocket.onopen = function(evt) {
onOpen(evt)
};
websocket.onclose = function(evt) {
onClose(evt)
};
websocket.onerror = function(evt) {
onError(evt)
};
}
function onOpen(evt) {
writeToScreen("CONNECTED");
doSend("WebSocket rocks");
}
function onClose(evt) {
writeToScreen("DISCONNECTED");
}
function onError(evt) {
writeToScreen('<span style = "color: red;">ERROR:</span> ' + evt.data);
}
function doSend(message) {
writeToScreen("SENT: " + message); websocket.send(message);
}
function writeToScreen(message) {
var pre = document.createElement("p");
pre.style.wordWrap = "break-word";
pre.innerHTML = message; output.appendChild(pre);
}
window.addEventListener("load", init, false);
</script>
<h2>WebSocket Test</h2>
<div id = "output"></div>
</html>
在瀏覽器中開啟上面程式碼檔案,得到以下結果: