、WebSocketのプロトコルの概要
- WebSocketは、HTML5仕様は、必ず統一前面と背面の状態を確保するために、フロントエンドにメッセージを押し戻すことができ、WebSocketの技術を使用して、ブラウザとサーバのバックエンドの双方向通信を問題解決のための新しい機能を導入して、伝統的なステートレスなHTTPプロトコル、これは、「できないこと」です。
WebSocketの前2.ブラウザ技術に、従来のサーバー側のプッシュメッセージを表示され、次のとおりですので、上のアヤックス、フラッシュ、彗星、Javaアプレットとを。例外なく、これらは、最新のステータスを取得するために舞台裏を求めるために随時、つまり、使用ロングポーリング技法です。ロングポーリングは、実装が簡単ですが、効果は、コールバック不要なオーバーヘッドを持参し、リアルタイム性能を確保することができないためにブラインドが多い、また貧困層である、背景には、次のポーリングのフロントエンドが知っている必要があるときに更新表示されます。
3.のWebSocketプロトコルは、双方がクライアントによって制御される質問と答えも、もはや、いつでも相互にデータを送信することができ、長い接続を確立するために、サーバーとブラウザをサポートしていません。プッシュ機能を実装する場合、サーバによってクライアントにデータを送信するために主にあります。
4.以前のサイトのプッシュ機能を実現するために、使用される方法は、ポーリングされています。ポーリングは、特定の時間間隔(例えば1秒)のサーバにブラウザによって送信されたHTTP要求で呼び出され、サーバは、次に、リアルタイムプッシュサーバのような錯覚を与えるために、クライアントのブラウザに最新のデータを返します。HTTPリクエストヘッダ(ヘッダ要求)長、及びデータ送信がわずかに非常に短くてもよいので、各要求によって消費される帯域幅の大部分がヘッダに消費されます。その後、そのインターネットからの情報だけでなく、改善されたポーリング方式は、彗星、Ajaxを使用と呼ばれています。しかし、この技術は、双方向通信が、達成することができます。
II。WebSocketの原理
以下に示すラウンドロビン比較チャートに基づいて(ポーリング)とプッシュ用WebSocketブラウザ(ブラウザ)とサーバ(Server)の相互作用の長さ:
WebSocketプロトコルのでオーバーhttpプロトコルに基づいて、その2は、多くの類似点を持っています。WebSocketプロトコルを使用している場合、実際には、その後のWebSocketへのhttpからプロトコル変換した後、プロトコル変換処理をハンドシェイク(握手)と呼ばれているブラウザと確立し始めて、サーバやHTTP接続は、サービスとクライアントを表し、私たちは、WebSocketの契約を設立することに合意しました。原因で正常に接続を確立するために、新しいプロトコル、ブラウザとWebサーバーのサポートのケースをWebSocketをすることに留意すべきです。接続の確立は、ブラウザがWebSocketのにHTTPからの所望のプロトコル変換を示すいくつかの追加情報を含めることによって、サーバへのHTTP要求を送信し、通常の状況下で。次のようにこの追加情報は、実際には、リクエストヘッダの更新を追加しています。
子供用の靴に精通しているHTTPを発見したことがあり、これはハンドシェイク要求HTTPプロトコルに類似しているので、いくつかのより多くの事。
これは、WebSocketのの中核である、などとしてApache、nginxのサーバーを伝える: - ではなく昔ながらのHTTPあなたに注意を払う、私は私が対応する処理アシスタントを見つけるために急いで、のWebSocketプロトコルを使用するための要求を開始しました。
まず、秒-のWebSocketキーは、Base64では値をエンコード、ブラウザがランダムに生成されているサーバーに指示します:泥炭、私はあなたが本当にWebSocketのアシスタントではありませんことを確認したい、ちらつきはありません。
その後、Sec_WebSocket-議定書は、URLが同じ、異なるサービスプロトコルのニーズを区別するために使用されるユーザー定義の文字列です。シンプルで理解する:今夜は私がAにサービスを提供したい、間違いの友達を作るん〜
最後に、秒-のWebSocket-バージョンを使用すると、奇妙なプロトコルのすべての種類があり、草案段階ではまだ、初めて、のWebSocketプロトコルをWebSocketのドラフト(プロトコルバージョン)を使用しているが、変なのが多いサーバーに指示します別の何かは、FirefoxとChromeは、クラスのバージョンが、大きな問題を使用していない多くのものを元のWebSocketプロトコル。しかし幸いにも、今、それが決定された - 私たちは皆、同じバージョンを使用します。ウェイターが、私はああ→_→13歳たい
次に、サーバは、以下のものを返すことが要求、WebSocketのそれの成功確立を受信したことを言いました!
あなたが主要なブラウザとバージョンを見ることができ、現在、以下のURLでwebscoketプロトコルをサポートしています。
サポートHTML5のブラウザは、通常、組み込みのJSを提供のWebSocketオブジェクト、開発者がサーバーとの接続を確立するのWebSocketこのオブジェクトを利用することができます。特にFirefoxでは、FirefoxでこのオブジェクトはMozWebSocketです。
ブラウザはJSコード検出でのWebSocketをサポートできるかどうか
WebSocketオブジェクトは、いくつかのコールバックメソッドを提供します
接続が正常に作成された場合//バックと呼ばれます
myWebSocket.onopen =機能(EVT){警告( "接続オープン..."); }。
//サーバーがコールバックされたメッセージを受け取ります
myWebSocket.onmessage =関数(EVT){アラート( "受信メッセージ:" + evt.data)。}。
接続が閉じられたときに//コールバック
myWebSocket.onclose =関数(EVT){アラート( "接続が閉じ。"); }。