8

websocket とその内部実装についてもっと学ぼうとしています。しかし、まだいくつかのことを理解できません。詳細な説明を求めてグーグルで検索してみましたが、それらのほとんどは大まかな概要を示しているだけです。以下は私の疑問です

1.私が読んだところによると、Web ソケット サーバー (C# / C++ 実装) はデフォルトでポート 80 を使用します。任意のポートを使用できますが、ファイアウォールの問題がないため、ポート 80 を使用することをお勧めします。その場合、Web サーバーと Web ソケット サーバーの両方を同じポート (80) で実行するにはどうすればよいでしょうか。

2. Web ソケット サーバーがポート 81 で実行され、Web サーバーがポート 80 で実行されているとします。

  1. したがって、ブラウザーが最初のハンドシェイク HTTP 要求 (アップグレード: websocket) を発行すると、この要求はポート 81 に送信されます。その場合、このリクエスト (下記参照) は HTTP プロトコルとは何の関係もありません。それでも、HTTP プロトコル ヘッダーを使用します。なんで?

           GET /mychat HTTP/1.1
           Host: server.example.com
           Upgrade: websocket
           Connection: Upgrade
           Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
           Sec-WebSocket-Protocol: chat
           Sec-WebSocket-Version: 13
           Origin: http://example.com
    
  2. ほとんどのブラウザーに現在実装されているのと同じ websocket インターフェイスを使用して、HTTP を使用せずに、特定のポートで直接 TCP/IP 接続を発行するのはなぜですか?

3. クライアント/サーバーから送受信されるデータのパケット サイズ制限またはデータ/バッファ制限はありますか? その場合、データをフレーム化して自分で処理する必要がありますか?

4. Websocket サーバーは常に別のサービス/プロセスである必要がありますか? 将来、Web サーバー (IIS、apache) には、そのプロセス空間内で Web ソケット サーバーをホストするためのサポートが含まれますか?

4

1 に答える 1

3
  1. HTTP 互換のハンドシェイクを使用することで、WebSocket ハンドラーを Web サーバーに統合したり、Web サーバーに WebSocket 接続を専用の WebSocket サーバーに転送させたりすることができます。

  2. WebSocket ハンドシェイクは、HTTP 互換ハンドシェイクを使用して、同じポートで両方のプロトコルを簡単に処理できるようにし、既存のファイアウォール構成で WebSocket トラフィックをより簡単にサポートできるようにします。さらに、クロスサイド スクリプト攻撃の防止は、HTTP 要求のコンテキストでよく理解されているため、WebSocket はその知識を活用します。接続が確立された後でも、WebSocket はraw ソケット接続ではありません。これはメッセージ ベースのプロトコルであるため、フレーミングが必要です。さらに、クライアント (ブラウザ) からサーバーへの送信時にフレーミングがマスクされ、プロキシ/キャッシュ/仲介者の誤動作における理論上の脆弱性に対する懸念が軽減されます。

  3. プロトコル自体のメッセージ サイズに制限はありません。メッセージは複数のフレームに分割できます。フレーム サイズにはプロトコル制限がありますが、2^64 バイトです。実際のフレーム サイズの制限は、クライアント/サーバーの実装によって異なります。送信したい数メガバイトの単一メッセージがある場合は、クロスブラウザーおよびクロスサーバーのサポートを最大化するために、より小さいメッセージを使用するようにアプリケーションを変更することを検討してください。

  4. WebSocket の処理は、間違いなく Web サーバーに統合できます。これは、ワーキング グループによって構想されたシナリオでした。たとえば、スタンドアロンまたは Apache の mod_python モジュールとして実行するように設計されたpywebsocketを考えてみましょう。別の例として、ASP.NET 4.5 と IIS 8 には WebSocket のサポートが組み込まれています

于 2012-08-01T18:16:30.790 に答える