WebSocketRoute
WebSocket
ルートが Page.routeWebSocket() または BrowserContext.routeWebSocket() で設定されるたびに、WebSocketRoute
オブジェクトは、実際のサーバーが行うように、WebSocket を処理することを可能にします。
モック
デフォルトでは、ルーティングされた WebSocket はサーバーに接続しません。これにより、WebSocket を介した通信全体をモックできます。以下は、"request"
に "response"
で応答する例です。
page.routeWebSocket("wss://example.com/ws", ws -> {
ws.onMessage(frame -> {
if ("request".equals(frame.text()))
ws.send("response");
});
});
WebSocket ルートハンドラー内で WebSocketRoute.connectToServer() を呼び出さないため、Playwright は WebSocket がモックされると想定し、ページ内で WebSocket を自動的に開きます。
JSON メッセージを処理する別の例を次に示します。
page.routeWebSocket("wss://example.com/ws", ws -> {
ws.onMessage(frame -> {
JsonObject json = new JsonParser().parse(frame.text()).getAsJsonObject();
if ("question".equals(json.get("request").getAsString())) {
Map<String, String> result = new HashMap();
result.put("response", "answer");
ws.send(gson.toJson(result));
}
});
});
インターセプト
または、実際のサーバーに接続し、途中でメッセージをインターセプトして変更またはブロックすることもできます。WebSocketRoute.connectToServer() を呼び出すと、サーバー側の WebSocketRoute
インスタンスが返され、メッセージを送信したり、受信メッセージを処理したりできます。
以下は、ページからサーバーに送信された一部のメッセージを変更する例です。サーバーからページに送信されたメッセージは、デフォルトの転送に依存して、そのまま残されます。
page.routeWebSocket("/ws", ws -> {
WebSocketRoute server = ws.connectToServer();
ws.onMessage(frame -> {
if ("request".equals(frame.text()))
server.send("request2");
else
server.send(frame.text());
});
});
サーバーに接続すると、すべての**メッセージが転送**されます。ページとサーバー間でデフォルトで転送されます。
ただし、元のルートで WebSocketRoute.onMessage() を呼び出すと、ページからサーバーへのメッセージは**転送されなくなり**ますが、代わりに handler によって処理される必要があります。
同様に、サーバー側の WebSocket で WebSocketRoute.onMessage() を呼び出すと、サーバーからページへの**メッセージの転送が停止**し、handler がそれらを処理する必要があります。
次の例は、双方向で一部のメッセージをブロックします。WebSocketRoute.onMessage() を双方向で呼び出すため、自動転送はまったくありません。
page.routeWebSocket("/ws", ws -> {
WebSocketRoute server = ws.connectToServer();
ws.onMessage(frame -> {
if (!"blocked-from-the-page".equals(frame.text()))
server.send(frame.text());
});
server.onMessage(frame -> {
if (!"blocked-from-the-server".equals(frame.text()))
ws.send(frame.text());
});
});
メソッド
close
追加バージョン: v1.48WebSocket 接続の片側を閉じます。
使用法
WebSocketRoute.close();
WebSocketRoute.close(options);
引数
options
WebSocketRoute.CloseOptions
(オプション)-
オプションの close code。
-
オプションの close reason。
-
戻り値
connectToServer
追加バージョン: v1.48デフォルトでは、ルーティングされた WebSocket はサーバーに接続しないため、WebSocket 通信全体をモックできます。このメソッドは実際の WebSocket サーバーに接続し、サーバー側の WebSocketRoute インスタンスを返し、サーバーからメッセージを送受信する機能を提供します。
サーバーに接続すると
- サーバーから受信したメッセージは、サーバー側の
WebSocketRoute
で WebSocketRoute.onMessage() が呼び出されない限り、ページ内の WebSocket に**自動的に転送**されます。 - ページ内の
WebSocket.send()
呼び出しによって送信されたメッセージは、元のWebSocketRoute
で WebSocketRoute.onMessage() が呼び出されない限り、サーバーに**自動的に転送**されます。
詳細については、上部の例を参照してください。
使用法
WebSocketRoute.connectToServer();
戻り値
onClose
追加バージョン: v1.48WebSocket.close
を処理できます。
デフォルトでは、ページまたはサーバーのいずれかで接続の片側を閉じると、もう片側も閉じられます。ただし、WebSocketRoute.onClose() ハンドラーが設定されている場合、クロージャのデフォルトの転送は無効になり、ハンドラーがそれに対処する必要があります。
使用法
WebSocketRoute.onClose(handler);
引数
-
WebSocket のクローズを処理する関数。オプションの close code とオプションの close reason を受信します。
onMessage
追加バージョン: v1.48このメソッドを使用すると、ページまたはサーバーから送信された WebSocket によって送信されるメッセージを処理できます。
元の WebSocket ルートで呼び出されると、このメソッドはページから送信されたメッセージを処理します。これらのメッセージを処理するには、WebSocketRoute.send() で応答するか、WebSocketRoute.connectToServer() によって返されるサーバー側の接続に転送するか、または他の処理を行います。
このメソッドが呼び出されると、メッセージはサーバーまたはページに自動的に転送されなくなります。代わりに、WebSocketRoute.send() を呼び出して手動で行う必要があります。詳細については、上部の例を参照してください。
このメソッドを再度呼び出すと、ハンドラーが新しいハンドラーでオーバーライドされます。
使用法
WebSocketRoute.onMessage(handler);
引数
-
handler
Consumer<WebSocketFrame>#メッセージを処理する関数。
send
追加バージョン: v1.48WebSocket にメッセージを送信します。元の WebSocket で呼び出されると、メッセージをページに送信します。WebSocketRoute.connectToServer() の結果に対して呼び出されると、メッセージをサーバーに送信します。詳細については、上部の例を参照してください。
使用法
WebSocketRoute.send(message);
引数
url
追加バージョン: v1.48ページで作成された WebSocket の URL。
使用法
WebSocketRoute.url();
戻り値