接続の有効期間が短く、さまざまなリクエストに再利用されるHTTPとは対照的に、WebSocket接続は通常、アプリケーションの有効期間にわたって永続的であり、同じサーバーに対して確立されている場合でも、他のWebSocketに再利用できません。したがって、複数のWebSocket対応コンポーネントで構成されるWebアプリケーションには、複数のWebSocket接続が必要です(下の図を参照)。これにより、次の問題が発生する可能性があります。
- クライアントのWebブラウザーは、十分な同時WebSocket接続をサポートしていない可能性があります(WebSocket接続の最大数は、使用するWebブラウザーによって異なります)。
- アプリケーションサーバーまたは一部の仲介者、つまりロードバランサーは、接続制限に達する可能性があります。
これらの問題を克服するために、APC WebSocketマルチプレクサは、1つの実際のWebSocket接続を介して複数のWebSocket接続の仮想化を提供します。つまり、各アプリケーションコンポーネントは引き続き独自の仮想WebSocket接続を確立しますが、コンポーネントが同じバックエンドサーバーに接続し、同じユーザーを使用している限り、すべてのメッセージは同じ実際のWebSocket接続を介して交換されます(下図を参照)。これにより、ユーザーエージェントごとのWebSocket接続が減るだけでなく、バックエンドサーバーごとに必要なWebSocket接続も大幅に減ります。
前提条件
WebSocket多重化を使用するには、WebアプリケーションはPCP WebSocketライブラリ<sap-pcp-websocket.js>(MIMEリポジトリの/sap/public/bc/ur/sap-pcp-websocket.jsで入手可能)を使用する必要があります。多重化をサポートするバージョンは、ApplicationServerABAPのSAPNetWeaverリリース7.51の時点で出荷されています。このバージョンでは、JavaScriptライブラリのWebSocketコンストラクター(SapPcpWebSocket )が、マルチプレクサーを有効にするための追加のオプションパラメーターを提供します。詳細については、JavaScriptライブラリのドキュメントを参照してください。
さらに、同じ実際のWebSocket接続を介してWebSocketを多重化するには、次の要件を満たす必要があります。
- 仮想WebSocketは、同じユーザーID(つまり、クライアント、ユーザーID、およびログオン言語)を使用してASABAPに接続する必要があります。
- 仮想WebSocketは、シングルサインオンを使用してASABAPに接続する必要があります。
- アプリケーションは、WebSocketサブプロトコルプッシュチャネルプロトコル(PCP)を使用して通信する必要があります。
- アプリケーションはステートレスである必要があります(つまり、トランザクションSAPCでステートフルとしてマークされてはなりません)。
- クライアントライブラリ(つまり、使用されるPCP JavaScriptライブラリ)とAS ABAPの両方が、WebSocketマルチプレクサを提供する必要があります。これは、SAPNetWeaverリリース7.51の時点でのケースです。
- 多重化は、トランザクションSAPCを介してASABAPのWebSocketアプリケーションに対して有効になっています。これは、SAP NetWeaverリリース7.51(既存のPCPアプリケーションの場合も)のデフォルトです。
要件の1つが満たされていない場合、AS ABAPは、特別なリターンコードを使用して仮想接続の設定を拒否します。接続パラメーターによっては、クライアント側のマルチプレクサー(PCP JavaScriptライブラリーに付属)が代わりに実際のWebSocket接続を確立しようとする場合があります。
サポート性と監視
- 監視トランザクションSMWSは、実際のWebSocket接続とそれに対応するすべての仮想WebSocketの両方を表示します。
- 設計時トランザクションSAPCでは、特定のアプリケーションのWebSocket多重化を無効にすることができます。
- マルチプレクサ機能のテストには、BSP / UI5アプリケーションhttps:// <host>:<port>/sap/bc/bsp/sap/wdr_testmuxui5/index.htmを使用できます。