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.48WebSocket 接続の片側を閉じます。
使用法
WebSocketRoute.close();
WebSocketRoute.close(options);
引数
optionsWebSocketRoute.CloseOptions(任意)
戻り値
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);
引数
onMessage
追加日: v1.48このメソッドは、WebSocket によって、ページから、またはサーバーから送信されたメッセージを処理することを可能にします。
元の WebSocket ルートで呼び出されると、このメソッドはページから送信されたメッセージを処理します。WebSocketRoute.send() で応答するか、WebSocketRoute.connectToServer() が返すサーバー側接続に転送するか、または別のことを行うことでこれらのメッセージを処理できます。
このメソッドが呼び出されると、メッセージは自動的にサーバーまたはページに転送されません。代わりに WebSocketRoute.send() を呼び出して手動で行う必要があります。詳細については、冒頭の例を参照してください。
このメソッドを再度呼び出すと、ハンドラーが新しいものに上書きされます。
使用法
WebSocketRoute.onMessage(handler);
引数
-
handlerConsumer<WebSocketFrame>#メッセージを処理する関数です。
send
追加日: v1.48WebSocket にメッセージを送信します。元の WebSocket で呼び出された場合、メッセージをページに送信します。WebSocketRoute.connectToServer() の結果で呼び出された場合、メッセージをサーバーに送信します。詳細については、冒頭の例を参照してください。
使用法
WebSocketRoute.send(message);
引数
url
追加日: v1.48ページで作成された WebSocket の URL。
使用法
WebSocketRoute.url();
戻り値