Qt WebSockets 概要

Qt WebSockets は、WebSocket対応アプリケーションの構築を可能にします。WebSocketプロトコルの実装を提供します。このプロトコルは、既存のWebインフラストラクチャを使用した双方向通信の優れた代替手段として、IETF(Internet Engineering Task Force)によって提供されています。

歴史的に、双方向通信やプッシュ通知を必要とするウェブ・アプリケーションは、利用可能なHTTPベースのソリューションのいずれかを使用する必要がありました。これらのソリューションは、ポーリング、ロング・ポーリング、ストリーミングなどの異なるテクニックを採用し、このようなユースケース向けに設計されていないHTTPプロトコルの制限を克服していました。その結果、ネットワークの待ち時間が長くなり、不必要なデータ交換が行われ、データが古くなったり陳腐化したりする。IETFが提供するWebSocketは、これらの問題を大幅に克服するのに役立ちます。

どのように機能するのか?

WebSocketプロトコール・フロー図

図にあるように、WebSocketベースのソリューションはクライアントサイドとサーバーサイドで構成されています。WebSocketのネイティブクライアント側のサポートは、Google Chrome、Internet Explorer、Safariなどの一般的なWebブラウザのほとんどで利用可能です。WebSocketのサーバー側のサポートは、双方向通信を可能にする完全なソリューションになります。ネイティブのWebSocketをサポートするブラウザであれば、HTML5 WebSocket APIを使用して、シンプルなHTMLとJavaScriptベースのクライアント・アプリケーションを実行できるはずです。

WebSocket接続は、最初のHTTP互換ハンドシェイクから始まります。これは、WebSocket接続がデフォルトのHTTP(80)とHTTPS(443)ポートを共有できるように、後方互換性を保証します。ハンドシェイクに成功すると、2つのエンティティの一方が接続を終了するまで、接続はデータ交換のためにオープンされます。

WebSocketプロトコルは、安全でないWebSocketリクエストと安全なWebSocketリクエストを表すために、それぞれws: とwss: URLスキームを使用します。最初のハンドシェイクの間に、プロキシサーバーが検出された場合、プロトコルはプロキシにHTTP CONNECT ステートメントを発行してトンネルをセットアップしようとする。プロキシを処理するトンネルのアプローチはリクエストの種類に関係なく使用されるが、安全な接続ではTLS(Transport Layer Security)の方がうまく動作することが証明されている。

典型的な使用例

WebSocketは、以下のようなシナリオに最適です、

  • 提示されるデータが最新でなければならない、
  • 低ネットワーク遅延と最小限のデータ交換が重要です。

例えば、インスタント・メッセージング、オンライン・ゲーム、オンライン株式取引などです。

APIの役割Qt WebSockets

Qt WebSockets モジュールは、WebSocket ベースのサーバーおよびクライアント・アプリケーションを開発するための API を提供します。これらのAPIが使用できる例としては、株価データを提供するサーバーアプリケーションと、いくつかの銘柄の価格に変化があったときにプッシュ通知を登録するクライアントアプリケーションがあります。

このモジュールでは、C++とQMLの両方のバージョンのAPIを提供しているので、ニーズに合った選択肢を選ぶことができます。

Qt WebSockets クラウドサービス

クライアント・アプリケーションは通常、データを外部サービスに依存しています。これらのサービス・プロバイダーのほとんどはまだ WebSocket をサポートしていないため、ギャップを埋めるために WebSocket 対応のサーバー・アプリケーションを開発することになります。クラウド・サービスのような企業向けWebSocketゲートウェイ・サービス上でサーバーを実行すれば、そのようなサービスをホストするために必要なインフラを維持する手間を省くことができる。

ほとんどのクラウド・サービスは、Platform as a Service(PaaS)バックエンドを提供しており、クラウド上にサーバー・アプリケーションのインスタンスをデプロイして実行することができます。クライアントアプリケーションは、WebSocket URLを使用して実行中のサーバーに接続し、データを受信することができます。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.