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()を呼び出すと、ページからサーバーへのメッセージは自動的に転送されなくなり、代わりにハンドラによって処理されるべきです。
同様に、サーバー側の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);
引数
options
WebSocketRoute.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);
引数
-
handler
Consumer<WebSocketFrame>#メッセージを処理する関数。
send
追加バージョン: v1.48WebSocketにメッセージを送信します。元のWebSocketで呼び出された場合、メッセージをページに送信します。WebSocketRoute.connectToServer()の結果で呼び出された場合、メッセージをサーバーに送信します。詳細については、冒頭の例を参照してください。
使用法
WebSocketRoute.send(message);
引数
url
追加バージョン: v1.48ページ内で作成されたWebSocketのURL。
使用法
WebSocketRoute.url();
戻り値