メインコンテンツへスキップ

WebSocketRoute

WebSocket ルートが page.routeWebSocket() または browserContext.routeWebSocket() で設定されるたびに、WebSocketRoute オブジェクトは、実際のサーバーが行うように、WebSocketを処理することができます。

モック

デフォルトでは、ルーティングされたWebSocketはサーバーに接続しません。この方法により、WebSocketを介した通信全体をモックすることができます。以下は、"request" に対して "response" で応答する例です。

await page.routeWebSocket('wss://example.com/ws', ws => {
ws.onMessage(message => {
if (message === 'request')
ws.send('response');
});
});

WebSocketルートハンドラ内で webSocketRoute.connectToServer() を呼び出さないため、PlaywrightはWebSocketがモックされると仮定し、ページ内で自動的にWebSocketを開きます。

JSONメッセージを処理する別の例です。

await page.routeWebSocket('wss://example.com/ws', ws => {
ws.onMessage(message => {
const json = JSON.parse(message);
if (json.request === 'question')
ws.send(JSON.stringify({ response: 'answer' }));
});
});

傍受

代わりに、実際のサーバーに接続しつつ、メッセージを途中で傍受して変更またはブロックしたい場合があります。webSocketRoute.connectToServer() を呼び出すと、サーバー側の WebSocketRoute インスタンスが返され、それに対してメッセージを送信したり、受信メッセージを処理したりすることができます。

以下は、ページからサーバーに送信された一部のメッセージを変更する例です。サーバーからページに送信されたメッセージは、デフォルトの転送に頼り、そのまま残されます。

await page.routeWebSocket('/ws', ws => {
const server = ws.connectToServer();
ws.onMessage(message => {
if (message === 'request')
server.send('request2');
else
server.send(message);
});
});

サーバーに接続した後、デフォルトでは、ページとサーバー間で全てのメッセージが転送されます

しかし、元のルートで webSocketRoute.onMessage() を呼び出すと、ページからサーバーへのメッセージは転送されなくなり、代わりに handler によって処理されるべきです。

同様に、サーバー側のWebSocketで webSocketRoute.onMessage() を呼び出すと、サーバーからページへのメッセージの転送が停止されhandler がそれらを処理する必要があります。

以下の例は、両方向で一部のメッセージをブロックします。両方向で webSocketRoute.onMessage() を呼び出しているため、自動転送は一切行われません。

await page.routeWebSocket('/ws', ws => {
const server = ws.connectToServer();
ws.onMessage(message => {
if (message !== 'blocked-from-the-page')
server.send(message);
});
server.onMessage(message => {
if (message !== 'blocked-from-the-server')
ws.send(message);
});
});

メソッド

close

追加バージョン: v1.48 webSocketRoute.close

WebSocket接続の片側を閉じます。

使用法

await webSocketRoute.close();
await webSocketRoute.close(options);

引数

戻り値


connectToServer

追加バージョン: v1.48 webSocketRoute.connectToServer

デフォルトでは、ルーティングされたWebSocketはサーバーに接続しないため、WebSocket通信全体をモックできます。このメソッドは、実際のWebSocketサーバーに接続し、サーバー側の WebSocketRoute インスタンスを返します。これにより、サーバーからメッセージを送受信する機能が提供されます。

サーバーに接続後

  • サーバーから受信したメッセージは、サーバー側の WebSocketRoutewebSocketRoute.onMessage() が呼び出されない限り、ページ内のWebSocketに自動的に転送されます
  • ページ内の WebSocket.send() 呼び出しによって送信されたメッセージは、元の WebSocketRoutewebSocketRoute.onMessage() が呼び出されない限り、サーバーに自動的に転送されます

詳細については、上部の例を参照してください。

使用法

webSocketRoute.connectToServer();

戻り値


onClose

追加バージョン: v1.48 webSocketRoute.onClose

WebSocket.close の処理を可能にします。

デフォルトでは、接続の片側を(ページまたはサーバーで)閉じると、もう一方も閉じられます。しかし、webSocketRoute.onClose() ハンドラが設定されている場合、クローズのデフォルトの転送は無効になり、ハンドラがそれを処理する必要があります。

使用法

webSocketRoute.onClose(handler);

引数


onMessage

追加バージョン: v1.48 webSocketRoute.onMessage

このメソッドは、WebSocketによって、ページからまたはサーバーから送信されるメッセージを処理することができます。

元のWebSocketルートで呼び出された場合、このメソッドはページから送信されたメッセージを処理します。これらのメッセージには、webSocketRoute.send() で応答したり、webSocketRoute.connectToServer() から返されたサーバー側接続に転送したり、その他の処理を行ったりすることができます。

このメソッドが呼び出されると、メッセージは自動的にサーバーやページに転送されません。代わりに、webSocketRoute.send() を呼び出して手動で転送する必要があります。詳細については、上部の例を参照してください。

このメソッドを再度呼び出すと、ハンドラが新しいものに上書きされます。

使用法

webSocketRoute.onMessage(handler);

引数


send

追加バージョン: v1.48 webSocketRoute.send

WebSocketにメッセージを送信します。元のWebSocketで呼び出された場合、メッセージはページに送信されます。webSocketRoute.connectToServer() の結果で呼び出された場合、メッセージはサーバーに送信されます。詳細については、上部の例を参照してください。

使用法

webSocketRoute.send(message);

引数


url

追加バージョン: v1.48 webSocketRoute.url

ページで作成されたWebSocketのURLです。

使用法

webSocketRoute.url();

戻り値