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

WebSocketRoute

Page.routeWebSocket() または BrowserContext.routeWebSocket() を使って WebSocket ルートを設定すると、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() を呼び出すと、ページからサーバーへのメッセージは転送されなくなり、代わりに ハンドラーによって処理される必要があります。

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

次の例では、両方向で一部のメッセージをブロックしています。両方向で 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.48 webSocketRoute.close

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

使用法

WebSocketRoute.close();
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();

戻り値