03-webSocket学習

3163 ワード

WebSocketって何?
  • WebSocketは、ネットワーク通信プロトコルです.RFC 6455は、その通信規格を定義する.
  • WebSocketは、HTML 5が提供し始めた単一のTCP接続上でフルデュプレクス通信を行うプロトコルである.

  • なぜWebSocketが必要なの?
  • コンピュータネットワークプロトコルを知っている人は、HTTPプロトコルが無状態、無接続、一方向のアプリケーション層プロトコルであることを知っているはずです.リクエスト/レスポンスモデルを採用しています.通信要求はクライアントからのみ開始され,サービス側は要求に対して応答処理を行う.
  • このような通信モデルには、HTTPプロトコルがサーバがクライアントに積極的にメッセージを開始することを実現できないという弊害がある.
  • という一方向要求の特徴は、サーバが連続的に状態が変化すると、クライアントが知るのは非常に面倒になることに決まっている.ほとんどのWebアプリケーションでは、頻繁な非同期JavaScriptとXML(AJAX)リクエストによって長いポーリングが実現されます.ポーリングの効率が低く、リソースが非常に浪費されます(接続を停止しないか、HTTP接続を常に開く必要があるため).
  • そのため、エンジニアたちはもっと良い方法があるかどうかを考えています.WebSocketはこのように発明された.WebSocket接続を使用すると、クライアントとサーバの間でフルデュプレクス通信が可能になり、どちらも確立された接続によってデータを他端にプッシュできます.WebSocketは1回の接続を確立するだけで、接続状態を維持することができます.これは、ポーリング方式による接続の継続的な確立に比べて、明らかに効率が大幅に向上します.

  • WebSocketはどのように働いていますか?
  • Webブラウザおよびサーバは、WebSocketsプロトコルを実装して接続を確立および維持する必要があります.WebSockets接続は長期にわたって存在するため、典型的なHTTP接続とは異なり、サーバに重要な影響を及ぼす.
  • マルチスレッドまたはマルチプロセスベースのサーバは、接続を開き、要求をできるだけ迅速に処理し、接続を閉じることを目的としているため、WebSocketsには適用できません.実際のWebSocketsサーバ側の実装には、非同期サーバが必要です.

  • WebSocketクライアント
  • クライアントでは、WebSockets用にJavaScriptライブラリを使用する必要はありません.WebSocketsを実装するWebブラウザは、WebSocketsオブジェクトを介して必要なすべてのクライアント機能を公開します(主にHtml 5をサポートするブラウザを指します).

  • クライアントAPI
  • 以下のAPIは、WebSocketオブジェクトを作成するために使用される.
  • /*
     * param 
     * url@       URL
     * protocol@     ,          
    */
    var Socket = new WebSocket(url, [protocol])
    

    WebSocketプロパティ
    WebSocketオブジェクトのプロパティを以下に示します.上記のコードを使用してSocketオブジェクトを作成したとします.
    ツールバーの
    説明
    Socket.readyState
    読み取り専用プロパティreadyStateは接続ステータスを表し、0-接続が確立されていないことを示します.1-接続が確立され、通信可能であることを示します.2-接続が閉じられていることを示します.3-接続が閉じているか、接続が開かないことを示します.
    Socket.bufferedAmount
    読み取り専用プロパティbufferedAmountはsend()によってキューに入れられて転送を待っていますが、まだ発行されていないUTF-8テキストバイト数です.
    WebSocketイベント
    以下はWebSocketオブジェクトに関するイベントです.上記のコードを使用してSocketオブジェクトを作成したとします.
    ≪イベント|Events|ldap≫
    イベントハンドラ
    説明
    open
    Socket.onopen
    接続確立時にトリガー
    message
    Socket.onmessage
    クライアントがサービス側データを受信するとトリガーされます
    error
    Socket.onerror
    通信エラー発生時にトリガー
    close
    Socket.onclose
    接続クローズ時にトリガー
    WebSocketメソッド
    WebSocketオブジェクトに関するメソッドを以下に示します.上記のコードを使用してSocketオブジェクトを作成したとします.
    方法
    説明
    Socket.send()
    接続を使用したデータの送信
    Socket.close()
    接続を閉じる
    //       WebSocket   
    var ws = new WebSocket('ws://localhost:9998/echo')
    
    //    web socket         
    ws.onopen = function() {
      //    send()       
      ws.send('    ')
      alert('     ...')
    }
    
    //             
    ws.onmessage = function(evt) {
      var received_msg = evt.data
      alert('     ...')
    }
    
    //    web socket         
    ws.onclose = function() {
      alert('     ...')
    }
    

    その他の特徴は次のとおりです.
  • はTCPプロトコル上に確立されており、サーバ側の実装は比較的容易である.
  • はHTTPプロトコルと良好な互換性を持っている.デフォルトポートも80と443であり、握手段階ではHTTPプロトコルを採用しているため、握手時にマスクしにくく、各種HTTPプロキシサーバを通過することができる.
  • データフォーマットは比較的軽量で、性能オーバーヘッドが小さく、通信が効率的である.
  • は、テキストを送信してもよいし、バイナリデータを送信してもよい.
  • 同源制限はなく、クライアントは任意のサーバと通信することができる.
  • プロトコル識別子はws(暗号化されている場合はwss)であり、サーバURLはURLである.