ホームページ  >  記事  >  バックエンド開発  >  Python の Tornado における WebSocket の概念と応用の紹介

Python の Tornado における WebSocket の概念と応用の紹介

不言
不言転載
2018-10-20 15:31:352267ブラウズ
この記事では、Python の Tornado における WebSocket の概念と応用について紹介します。一定の参考価値があります。困っている友人は参考にしてください。お役に立てれば幸いです。

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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。