Websockets-handling-errors
WebSockets-エラー処理
クライアントとサーバーの間で接続が確立されると、Web Socketインスタンスから open イベントが発生します。 通信中に発生する間違いに対してエラーが生成されます。 onerror イベントの助けを借りてマークされます。 Onerror の後には常に接続の終了が続きます。
*onerror* イベントは、通信間に何らかの問題が発生したときに発生します。 イベント *onerror* の後に接続終了が続きます。これは *close* イベントです。
予期しないエラーについて常にユーザーに通知し、それらを再接続することをお勧めします。
socket.onclose = function(event) {
console.log("Error occurred.");
//Inform the user about the error.
var label = document.getElementById("status-label");
label.innerHTML = "Error: " + event;
}
エラー処理に関しては、内部パラメーターと外部パラメーターの両方を考慮する必要があります。
- 内部パラメーターには、コードのバグ、または予期しないユーザーの動作のために生成される可能性のあるエラーが含まれます。
- 外部エラーはアプリケーションとは関係ありません。むしろ、それらは制御できないパラメーターに関連しています。 最も重要なものは、ネットワーク接続です。
- 双方向の双方向Webアプリケーションには、アクティブなインターネット接続が必要です。
ネットワークの可用性の確認
タスクの途中で突然ネットワーク接続が応答しなくなったときに、ユーザーがWebアプリを楽しんでいると想像してください。 最新のネイティブデスクトップおよびモバイルアプリケーションでは、ネットワークの可用性を確認することが一般的なタスクです。
最も一般的な方法は、稼働しているはずのWebサイト(http://www.google.comなど)にHTTPリクエストを送信するだけです。 要求が成功すると、デスクトップまたはモバイルデバイスはアクティブな接続があることを認識します。 同様に、HTMLには、ネットワークの可用性を判別するための XMLHttpRequest があります。
ただし、HTML5ではさらに簡単になり、ブラウザーがWeb応答を受け入れることができるかどうかを確認する方法が導入されました。 これは、ナビゲーターオブジェクトを介して達成されます-
if (navigator.onLine) {
alert("You are Online");
}else {
alert("You are Offline");
}
オフラインモードは、デバイスが接続されていないか、ユーザーがブラウザーのツールバーからオフラインモードを選択したことを意味します。
ネットワークが利用できないことをユーザーに通知し、WebSocket closeイベントが発生したときに再接続を試みる方法は次のとおりです-
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>
出力は次のとおりです-