HTML 5 WebSocketについて

2715 ワード

Email:longsu2010 at yeah dot net
WebSocketは私が今いる会社がデータを取得する主なチャネルであり、私の仕事の重要な構成部分でもあります.今日、同僚がこの問題について議論しているのを見て、WebSocketを同期してデバッグするエラー(WebSocketは非同期全二重通信で、標準はこのようなものです)がたくさん出てきたので、WebSocketについて簡単な説明をして、必要があれば後期に詳細な補充をする可能性があります.私のCSDNブログに注目してください.
簡単な例:
var socket = new WebSocket('ws://' + host + ':' + port);
socket.onmessage = function(evt){
console.log(evt.data);
};
socket.onclose = function(){ };
socket.onopen = function(){
this.send(「送信されたコンテンツ」);
};
socket.onerror = function(err){
console.log(err); console.log(arguments);
};
//メッセージの送信方法
function sendMsg(){
	if( socket && (websock.readyState === 1) ){
		socket.send("sdf");
	}else{
		//       
		//   or      
	}
}

AJAXでデータを取得する場合、XMLHTTPRequestオブジェクト(インスタンス)は一般的に多重化されません(毎回新しいものが作成されます)が、WebSocket接続は多重化可能であり、サーバ側接続の削減、接続の作成時間の節約など、多重化のメリットが多く、多重化されない理由はありません.多重化のため一般的にWebSocketインスタンスは1つしか作成されませんが、通信の信頼性を保証するためには、情報を送信するたびにWebSocket接続が利用可能かどうかをチェックし(サーバ側が自発的に接続を切断したのではないか)、利用可能であれば情報を送信できますか?利用可能であれば送信し、それを送信キューに入れることはできません.WebSocketインスタンスのreadyStateプロパティは、WebSocketインスタンスのステータスを検出するために使用されます.以下に説明します.
readyState
0:定数CONNECTINGに対応し、接続が作成されていることを示します.
1:定数OPENに対応し、接続が通信可能状態であることを示す
2:定数CLOSINGに対応し、接続が切断されていることを示す
3:定数CLOSEDに対応し、接続が切断されたことを示す
WebSocketインスタンスの作成と情報転送は非同期であるため、接続の作成が完了したときに呼び出される関数などのコールバック関数に関連します.コールバック関数ハンドルは次のとおりです.
onopen:接続作成が完了して呼び出される関数は、openイベントに対応し、送信待ちキューの情報をserver側に送信するのに適しています.
onerror:接続自体に問題が発生した場合、errorイベントに対応し、再接続に適しています.
onclose:接続がオフの場合、closeイベントに対応し、リソースクリーンアップに適しています.
onmessage:サーバ側がクライアントに情報をプッシュすると、messageイベントに対応します.
WebSocketインスタンスが提供する方法は次のとおりです.
send:server側に情報を送信します.readyStateが1の場合はtrueを返します.そうでない場合はfalseを返します.
close:WebSocket接続を閉じます.
WebSocketインスタンスでは、次のイベントが公開されます.
Open:接続の作成が完了したとき、readyStateが0から1になったとき.
Message:サーバ側からクライアント側に情報がプッシュされるたびに.
error:接続自体にエラーが発生した場合
close:接続がオフの場合.
サブスクリプション・イベントは、WebSocketインスタンスのaddEventListenerメソッドによって実行できます.たとえば、次のようになります.
var onmsg = function(){
console.log(arguments)
};
socket.addEventListener("message", onmsg);
購読をキャンセルするには、次のようなremoveEventListenerを使用します.
socket.removeEventListener("message", onmsg);
機能上socket.addEventListener("message", onmsg);socket.とonopen = onmsg;同じです.違いは、前者は複数のコールバック関数を追加できるが、後者は付与操作であり、常に最後に付与された値を使用することです.