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

WebSocketRoute

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

モック

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

await page.RouteWebSocketAsync("wss://example.com/ws", ws => {
ws.OnMessage(frame => {
if (frame.Text == "request")
ws.Send("response");
});
});

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

JSON メッセージを処理する別の例を次に示します。

await page.RouteWebSocketAsync("wss://example.com/ws", ws => {
ws.OnMessage(frame => {
using var jsonDoc = JsonDocument.Parse(frame.Text);
JsonElement root = jsonDoc.RootElement;
if (root.TryGetProperty("request", out JsonElement requestElement) && requestElement.GetString() == "question")
{
var response = new Dictionary<string, string> { ["response"] = "answer" };
string jsonResponse = JsonSerializer.Serialize(response);
ws.Send(jsonResponse);
}
});
});

インターセプト

または、実際のサーバーに接続したいが、途中でメッセージをインターセプトして変更またはブロックしたい場合があります。WebSocketRoute.ConnectToServer を呼び出すと、サーバー側の WebSocketRoute インスタンスが返され、メッセージを送信したり、受信メッセージを処理したりできます。

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

await page.RouteWebSocketAsync("/ws", ws => {
var server = ws.ConnectToServer();
ws.OnMessage(frame => {
if (frame.Text == "request")
server.Send("request2");
else
server.Send(frame.Text);
});
});

サーバーに接続すると、すべてのメッセージが転送デフォルトでページとサーバー間で。

ただし、元のルートで WebSocketRoute.OnMessage() を呼び出すと、ページからサーバーへのメッセージは転送されなくなりますが、代わりに handler で処理する必要があります。

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

次の例は、両方向で一部のメッセージをブロックします。WebSocketRoute.OnMessage() を両方向で呼び出すため、自動転送は一切ありません。

await page.RouteWebSocketAsync("/ws", ws => {
var server = ws.ConnectToServer();
ws.OnMessage(frame => {
if (frame.Text != "blocked-from-the-page")
server.Send(frame.Text);
});
server.OnMessage(frame => {
if (frame.Text != "blocked-from-the-server")
ws.Send(frame.Text);
});
});

メソッド

CloseAsync

追加: v1.48 webSocketRoute.CloseAsync

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

使用法

await WebSocketRoute.CloseAsync(options);

引数

  • options WebSocketRouteCloseOptions? (オプション)

戻り値


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);

引数

  • handler Action<int?, string>#

    WebSocket のクローズを処理する関数。オプションの close コード とオプションの close 理由 を受信します。


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);

引数

  • message string | byte[]#

    送信するメッセージ。


Url

追加: v1.48 webSocketRoute.Url

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

使用法

WebSocketRoute.Url

戻り値