Spec-Zone.ru › Deno 2

Веб-сокеты

Обеспечьте взаимодействие между клиентами и серверами в реальном времени с помощью веб-сокетов. Инструменты для создания интерактивных и динамичных приложений.

Например WebSocket


функция Deno.upgradeWebSocket

upgradeWebSocket(
request: Request,
options?: UpgradeWebSocketOptions,
): WebSocketUpgrade

Преобразует входящий HTTP-запрос в запрос веб-сокета.

Получив Request, функция возвращает пару экземпляров WebSocket и Response. Для успешного переключения на веб-сокет необходимо ответить на исходный запрос с помощью возвращённого ответа.

Deno.serve((req) => {
  if (req.headers.get("upgrade") !== "websocket") {
    return new Response(null, { status: 501 });
  }
  const { socket, response } = Deno.upgradeWebSocket(req);
  socket.addEventListener("open", () => {
    console.log("a client connected!");
  });
  socket.addEventListener("message", (event) => {
    if (event.data === "ping") {
      socket.send("pong");
    }
  });
  return response;
});

Если тело запроса было затронуто (из него читали) до завершения переключения, переключение завершится ошибкой.

Эта операция пока не потребляет запрос и не открывает веб-сокет. Это происходит только после передачи возвращённого ответа в respondWith().

Параметры

request: Request
options: UpgradeWebSocketOptions
необязательный

Тип возвращаемого значения

WebSocketUpgrade

интерфейс Deno.UpgradeWebSocketOptions

Параметры, которые можно задать при переключении Request на веб-сокет с помощью Deno.upgradeWebSocket.

Свойства

protocol: string
необязательный

Устанавливает свойство .protocol веб-сокета на стороне клиента в указанное здесь значение, которое должно быть одной из строк, заданных в параметре protocols при запросе веб-сокета. Это позволяет клиентам и серверам указывать подпротоколы для взаимодействия друг с другом.

idleTimeout: number
необязательный

Если клиент не ответит на этот кадр сообщением pong в течение указанного тайм-аута, соединение считается неисправным и закрывается. Будут сгенерированы события close и error.

Единица измерения — секунды, значение по умолчанию — 30. Установите значение 0, чтобы отключить тайм-ауты.

socket: import("node:net").Socket
необязательный

node:net Socket из события "upgrade" сервера node:http. Если параметр задан, переключение на веб-сокет выполняется через это существующее TCP-соединение, а не через встроенный механизм переключения Deno.serve. Ответ 101 Switching Protocols записывается автоматически.

import http from "node:http";

const server = http.createServer();
server.on("upgrade", (req, socket, head) => {
  const { socket: ws } = Deno.upgradeWebSocket(
    new Request(`http://${req.headers.host}/`, {
      headers: req.headers as HeadersInit,
    }),
    { socket: socket as import("node:net").Socket, head },
  );
  ws.onmessage = (e) => ws.send(e.data);
});
head: Uint8Array
необязательный

Дополнительные байты, уже буферизованные парсером HTTP и полученные вместе с заголовками запроса на переключение. Это head Buffer из события "upgrade" сервера node:http; их необходимо передать дальше, чтобы эти байты не потерялись.


интерфейс Deno.WebSocketUpgrade

Объект, возвращаемый при запросе Deno.upgradeWebSocket.

Свойства

response: Response

Объект ответа, представляющий HTTP-ответ клиенту. Для успешного переключения его необходимо использовать для RequestEvent .respondWith().

socket: WebSocket

Интерфейс WebSocket для взаимодействия с клиентом через веб-сокет.


© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/deno/websockets

Spec-Zone.ru

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