WebSocket の使用

このページの内容は ApigeeApigee ハイブリッドに該当します。

Apigee Edge のドキュメントはこちらをご覧ください。

このトピックでは、Apigee と Apigee ハイブリッドで WebSocket を使用する方法について説明します。

はじめに

ゲーム、通話、金融取引、その他の高スループットのアクティビティなど、ウェブ上でのリアルタイムの対話が必要な状況は数多くあります。

WebSocket は、単一の TCP 接続を介してウェブ クライアントとウェブサーバーの間に全二重通信チャネルを提供するプロトコルです。WebSocket プロトコルは、HTTP プロトコルを使用してクライアントとサーバー間の接続を確立します。接続が確立されると、クライアントとサーバーは WebSocket プロトコルを使用してデータの送受信を行います。

WebSocket の仕様とプロトコルは W3C によって管理されています。

Apigee での WebSocket のサポート

Apigee と Apigee ハイブリッドでは、環境グループによって環境へのルーティングが行われ、API プロキシが公開されるホスト名が定義されます。環境グループでは、HTTP プロトコルと WS プロトコルの両方がネイティブにサポートされています。WebSocket を使用するための特別な環境グループや特別な構成を作成する必要はありません。代わりに、クライアントが Upgrade リクエスト ヘッダーを含めることによって、HTTP から WS へのプロトコル アップグレードをリクエストします。API プロキシ エンドポイントに対するアップグレード リクエストは、101 Switching Protocols レスポンスを返します。その後、WebSocket 接続が閉じられるまで、リクエストとレスポンスが双方向に行われます。

ポリシーのサポート

ハンドシェイクが完了するまで(つまり HTTP 101 レスポンスがクライアントに返されるまで)は、すべてのポリシーがウェブ ソケット プロキシで機能します。その後、ポリシーは実行されなくなりますが、ハンドシェイクの前に検証された OAuth トークンは引き続き有効で、トークンの有効期限が切れるか、取り消されると、接続は切断されます。

接続の取り消し

WebSocket 接続は、次の場合に閉じられます。

  • プロキシ エンドポイントが API キーまたは OAuth トークンのないリクエストを受信した場合。
  • プロキシ エンドポイントが、期限が切れているか無効な API キーまたは OAuth トークンを含むリクエストを受信した場合。
  • WebSocket 接続がタイムアウトした場合。

トレースと分析の使用

Debug ツールでは、次のスクリーンショットに示すように、WebSocket 接続ごとに 1 つのリクエストが 101 ステータスで表示されます。

デバッグツールでの 101 ステータスのリクエスト。

Apigee 分析ダッシュボードには、WebSocket セッションごとにカウントされたトラフィックが表示されます。セッション中に発生した往復トラフィックはダッシュボードに表示されません。

WebSocket アプリケーションのサンプル

詳しくは、GitHub の動作する websocket-sample アプリケーションをご覧ください。このサンプルは、WebSocket 接続を介して API プロキシを呼び出す方法を示しています。プロキシは、Kubernetes クラスタにデプロイされたシンプルなバックエンドのターゲット アプリケーションを呼び出します。