Spec-Zone.ru › Playwright

WebSocketRoute

Всякий раз, когда маршрут WebSocket настраивается с помощью page.routeWebSocket() или browserContext.routeWebSocket(), объект WebSocketRoute позволяет обрабатывать соединение WebSocket, как это делает реальный сервер.

Моделирование

По умолчанию маршрутизированное соединение WebSocket не подключается к серверу. Таким образом, вы можете смоделировать весь обмен данными через WebSocket. Вот пример, который отвечает на "request" сообщением "response".

await page.routeWebSocket('wss://example.com/ws', ws => {
  ws.onMessage(message => {
    if (message === 'request')
      ws.send('response');
  });
});

Поскольку мы не вызываем webSocketRoute.connectToServer() внутри обработчика маршрута WebSocket, Playwright предполагает, что соединение WebSocket будет смоделировано и автоматически откроет WebSocket на странице.

Вот другой пример, который обрабатывает JSON-сообщения:

await page.routeWebSocket('wss://example.com/ws', ws => {
  ws.onMessage(message => {
    const json = JSON.parse(message);
    if (json.request === 'question')
      ws.send(JSON.stringify({ response: 'answer' }));
  });
});

Перехват

В качестве альтернативы, вы можете подключиться к реальному серверу, но перехватывать сообщения между ними и изменять или блокировать их. Вызов webSocketRoute.connectToServer() возвращает экземпляр WebSocketRoute серверной стороны, которому вы можете отправлять сообщения или обрабатывать входящие сообщения.

Ниже приведен пример, который изменяет некоторые сообщения, отправляемые страницей на сервер. Сообщения, отправленные с сервера на страницу, остаются неизменными, используя стандартную передачу.

await page.routeWebSocket('/ws', ws => {
  const server = ws.connectToServer();
  ws.onMessage(message => {
    if (message === 'request')
      server.send('request2');
    else
      server.send(message);
  });
});

После подключения к серверу все сообщения по умолчанию передаются между страницей и сервером.

Однако, если вы вызовете webSocketRoute.onMessage() на исходном маршруте, сообщения со страницы на сервер больше не будут передаваться, а вместо этого должны обрабатываться обработчиком.

Аналогично, вызов webSocketRoute.onMessage() на WebSocket серверной стороны прекратит передачу сообщений с сервера на страницу, и обработчик должен позаботиться о них.

Следующий пример блокирует некоторые сообщения в обоих направлениях. Поскольку он вызывает webSocketRoute.onMessage() в обоих направлениях, никакой автоматической передачи не происходит.

await page.routeWebSocket('/ws', ws => {
  const server = ws.connectToServer();
  ws.onMessage(message => {
    if (message !== 'blocked-from-the-page')
      server.send(message);
  });
  server.onMessage(message => {
    if (message !== 'blocked-from-the-server')
      ws.send(message);
  });
});

Методы​

close​

Закрывает одну сторону соединения WebSocket.

Использование

await webSocketRoute.close();
await webSocketRoute.close(options);

Аргументы

  • options Объект (необязательно)
    • code число (необязательно)

      Необязательный код закрытия.

    • reason строка (необязательно)

      Необязательное описание причины закрытия.

Возвращает

  • Promise<пусто>

connectToServer​

По умолчанию маршрутизированное соединение WebSocket не подключается к серверу, поэтому вы можете смоделировать весь обмен данными через WebSocket. Этот метод подключается к фактическому WebSocket серверу и возвращает экземпляр WebSocketRoute серверной стороны, предоставляя возможность отправлять и получать сообщения с сервера.

После подключения к серверу:

  • Полученные с сервера сообщения будут автоматически передаваться в WebSocket на странице, если не вызвана webSocketRoute.onMessage() на серверной стороне WebSocketRoute.
  • Сообщения, отправленные через вызов WebSocket.send() на странице, будут автоматически передаваться на сервер, если не вызвана webSocketRoute.onMessage() на исходной WebSocketRoute.

Более подробную информацию см. в примерах вверху страницы.

Использование

webSocketRoute.connectToServer();

Возвращает

  • WebSocketRoute

onClose​

Позволяет обработать WebSocket.close.

По умолчанию закрытие одной стороны соединения, как на странице, так и на сервере, закроет другую сторону. Однако, если задан обработчик webSocketRoute.onClose(), стандартная передача закрытия отключена, и обработчик должен позаботиться о ней.

Использование

webSocketRoute.onClose(handler);

Аргументы

  • handler функция(число | [undefined]):Promise<Объект> | Объект

    Функция, которая будет обрабатывать закрытие WebSocket. Получает необязательный код закрытия и необязательное описание причины закрытия.

onMessage​

Этот метод позволяет обрабатывать сообщения, отправленные через WebSocket, как со страницы, так и с сервера.

При вызове на исходном маршруте WebSocket этот метод обрабатывает сообщения, отправленные со страницы. Вы можете обработать эти сообщения, ответив на них с помощью webSocketRoute.send(), передав их на серверное соединение, возвращенное webSocketRoute.connectToServer(), или сделать что-то еще.

После вызова этого метода сообщения не будут автоматически передаваться на сервер или на страницу — вы должны сделать это вручную, вызвав webSocketRoute.send(). Более подробную информацию см. в примерах вверху страницы.

Повторный вызов этого метода перезапишет обработчик новым.

Использование

webSocketRoute.onMessage(handler);

Аргументы

  • handler функция(строка):Promise<Объект> | Объект

    Функция, которая будет обрабатывать сообщения.

send​

Отправляет сообщение в WebSocket. При вызове на исходном WebSocket отправляет сообщение на страницу. При вызове на результате webSocketRoute.connectToServer() отправляет сообщение на сервер. Более подробную информацию см. в примерах вверху страницы.

Использование

webSocketRoute.send(message);

Аргументы

  • message строка | Буфер

    Отправляемое сообщение.

url​

URL WebSocket, созданного на странице.

Использование

webSocketRoute.url();

Возвращает

  • строка

© 2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/api/class-websocketroute

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API