Tornado の非同期性により、サーバーの同時実行性の高い処理に非常に適しています。クライアントとサーバー間の永続接続アプリケーション フレームワークは、同時実行性が高い典型的なアプリケーションです。 WebSocket は、HTTP クライアントとサーバーの間に永続的な接続を確立する HTML5 標準テクノロジです。この章では、Tornado フレームワークにおける WebSocket テクノロジのアプリケーションについて説明します。
WebSocket プロトコルは、HTML5 で定義された新しい標準プロトコル (RFC6455) で、ブラウザとサーバー間の全二重通信を実現します。
1. WebSocket アプリケーションのシナリオ
従来の HTTP および HTML テクノロジは、クライアントを使用して、サーバーにリクエストをアクティブに送信し、応答を取得します。ただし、インスタント メッセージングの需要が高まるにつれて、この通信モデルではアプリケーションのニーズを満たせない場合があります。
WebSocket は通常の Socket 通信に似ており、HTTP のリクエストとレスポンスの元の 1 対 1 通信モデルを破壊し、サーバーがクライアントのリクエストを受動的にのみ受け入れることができるアプリケーション シナリオも破壊します。おそらく読者は、Ajax やロング ポーリングなどの従来の HTTP に基づく動的クライアント テクノロジについて聞いたことがあると思いますが、これらのテクノロジはすべてポーリング テクノロジを使用しており、大量のネットワーク帯域幅とコンピューティング リソースを消費します。
WebSocket は、このようなシナリオに対応するために策定された HTML5 標準です 通常の Socket 通信と比較して、WebSocket はアプリケーション層で基本的な対話処理を定義し、Tornado や JavaScript クライアントなどのサーバー フレームワークを作成します 標準的な WebSocket モジュールを構築できます。
WebSocket の特徴は次のように要約されます。
WebSocket は、サーバーがアクティブにプッシュするシナリオに適しています。
Ajax やロング ポーリングなどのテクノロジと比較して、WebSocket 通信モデルはより効率的です。
WebSocket は引き続き HTTP を使用してインターネット通信を完了します。
HTML5 の標準プロトコルであるため、企業のファイアウォールによってブロックされることはありません。
2. WebSocket の通信原理
WebSocket の通信原理は、クライアントとサーバーの間に TCP 永続リンクを確立することです。サーバーにクライアントにプッシュする必要があるメッセージがある場合、即座に通信できること。
WebSocket は HTTP ではありませんが、HTML コンテンツはカプセル化され、インターネット上では HTTP によって送信されるため、WebSocket は HTTP と連携する必要があります。 IETF は、HTTP リンクに基づいて WebSocket チャネルを確立するための標準プロセスを RFC6455 で定義しています。
クライアントは、次の HTTP リクエストを送信して、WebSocket のロング リンク チャネルを確立する必要があることをサーバーに伝えます。
GET /stock_info/?encoding=text HTTP/1.1 Host:echo.websocket.org Origin:http://websocket.org Cookie:__token=ubcxx13 Connection:Upgrade Sec-WebSocket-Key:uRovscZjNol/umbTt5uKmw== Upgrade:websocket Sec-WebSocket-Version:13
読者は、これがまだ HTTP リクエスト パケットであることがわかり、よく知られています。内容とともに。
HTTP リクエスト メソッド: GET
リクエスト アドレス:/stock_info
HTTP バージョン番号: 1.1
サーバーホストドメイン名: echo.websocket.org
Cookie 情報: __token=ubcxx13
しかし、HTTP ヘッダーには 4 つの特徴的なフィールドがあります。それらは次のとおりです:
Connection:Upgrade Sec-WebSocket-Key:uRovscZjNol/umbTt5uKmw== Upgrade:websocket Sec-WebSocket-Version:13
これは WebSocket リンク確立の核心です。これは Web サーバーに、「クライアントは WebSocket リンクを確立したいと考えています」と伝えます。 WebSocket のバージョンは 13、キーは uRovscZjNol/umbTt5uKmw== を使用します。
リクエストを受信した後、サーバーは、WebSocket リンクの確立に同意した場合、次のようなレスポンスを返します。
HTTP/1.1 101 WebSocket Protocol Handshake Date:Fri,10 Feb 2012 17:38:18 GMT Connection:Upgrade Server:Kaazing Gateway Upgrade:WebSocket Access-Control-Allow-Origin:http://websocket.org Access-Contril-Allow-Credentials:true Sec-WebSocket-Accept:rLHCKw/SKs09GAH/ZSFhBATDKrU= Access-Control-Allow-Headers:content-type
これは依然として標準の HTTP レスポンスであり、ヘッダー情報が含まれています。 WebSocket に関連するものは次のとおりです:
Connection:Upgrade Upgrade:WebSocket Sec-WebSocket-Accept:rLHCKw/SKs09GAH/ZSFhBATDKrU=
最初の 2 つのデータはクライアントに次のことを伝えます: サーバーはこの接続を WebSocket リンクに変換しました。 Sec-WebSocket-Acceptは、クライアントがサーバーが正常に動作していることを確認するために、クライアントが送信するSec-WebSocket-Keyを暗号化して生成されるデータです。
この時点で、クライアントとサーバーの間に TCP 永続リンクが確立されており、両者はいつでも相互にメッセージを送信できます。
以上がPython の Tornado における WebSocket の概念と応用の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。