Spec-Zone.ru › Socket.IO 4

Параметры сервера

Параметры сервера Socket.IO

path

Значение по умолчанию: /socket.io/

Это имя пути, которое захватывается на стороне сервера.

Значения сервера и клиента должны совпадать (если вы не используете прокси для перенаправления пути).

Сервер

import { createServer } from "http";
import { Server } from "socket.io";

const httpServer = createServer();
const io = new Server(httpServer, {
  path: "/my-custom-path/"
});

Клиент

import { io } from "socket.io-client";

const socket = io("https://example.com", {
  path: "/my-custom-path/"
});

serveClient

Значение по умолчанию: true

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

  • <url>/socket.io/socket.io.js
  • <url>/socket.io/socket.io.min.js
  • <url>/socket.io/socket.io.msgpack.min.js

(включая связанные карты исходных данных)

См. также здесь.

adapter

Значение по умолчанию: require("socket.io-adapter") (адаптер в оперативной памяти, исходный код которого можно найти здесь)

Использовать "Адаптер".

Пример с адаптером Redis:

  • CommonJS
  • ES модули
  • TypeScript
const { Server } = require("socket.io");
const { createAdapter } = require("@socket.io/redis-adapter");
const { createClient } = require("redis");

const pubClient = createClient({ host: "localhost", port: 6379 });
const subClient = pubClient.duplicate();

const io = new Server({
  adapter: createAdapter(pubClient, subClient)
});

io.listen(3000);
import { Server } from "socket.io";
import { createAdapter } from "@socket.io/redis-adapter";
import { createClient } from "redis";

const pubClient = createClient({ host: "localhost", port: 6379 });
const subClient = pubClient.duplicate();

const io = new Server({
  adapter: createAdapter(pubClient, subClient)
});

io.listen(3000);
import { Server } from "socket.io";
import { createAdapter } from "@socket.io/redis-adapter";
import { createClient } from "redis";

const pubClient = createClient({ host: "localhost", port: 6379 });
const subClient = pubClient.duplicate();

const io = new Server({
  adapter: createAdapter(pubClient, subClient)
});

io.listen(3000);

parser

Значение по умолчанию: socket.io-parser

Использовать парсер. См. документацию здесь.

connectTimeout

Значение по умолчанию: 45000

Количество мс, по истечении которых клиент, не подключившийся к пространству имен, будет отключен.

Параметры низкоуровневого движка

pingTimeout

Значение по умолчанию: 20000

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

Сервер отправляет запрос ping, и если клиент не отвечает запросом pong в течение pingTimeout мс, сервер считает, что соединение закрыто.

Аналогично, если клиент не получает запрос ping от сервера в течение pingInterval + pingTimeout мс, клиент также считает, что соединение закрыто.

В обоих случаях причиной отключения будет: ping timeout

socket.on("disconnect", (reason) => {
  console.log(reason); // "ping timeout"
});

Примечание: значение по умолчанию может быть несколько низким, если в приложении необходимо отправлять большие файлы. Увеличьте его, если это необходимо:

const io = new Server(httpServer, {
  pingTimeout: 30000
});

pingInterval

Значение по умолчанию: 25000

См. выше.

upgradeTimeout

Значение по умолчанию: 10000

Задержка в миллисекундах, по истечении которой незавершенное обновление транспорта отменяется.

maxHttpBufferSize

Значение по умолчанию: 1e6 (1 МБ)

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

const io = new Server(httpServer, {
  maxHttpBufferSize: 1e8
});

Соответствует параметру maxPayload пакета ws.

allowRequest

Значение по умолчанию: -

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

Пример:

const io = new Server(httpServer, {
  allowRequest: (req, callback) => {
    const isOriginValid = check(req);
    callback(null, isOriginValid);
  }
});

Это также можно использовать совместно с событием initial_headers, чтобы отправить cookie клиенту:

import { serialize } from "cookie";

const io = new Server(httpServer, {
  allowRequest: async (req, callback) => {
    const session = await fetchSession(req);
    req.session = session;
    callback(null, true);
  }
});

io.engine.on("initial_headers", (headers, req) => {
  if (req.session) {
    headers["set-cookie"] = serialize("sid", req.session.id, { sameSite: "strict" });
  }
});

См. также:

  • как использовать с express-session
  • как работать с cookie

transports

Значение по умолчанию: ["polling", "websocket"]

Низкоуровневые транспорты, разрешенные на стороне сервера.

См. также: параметры клиента transports

allowUpgrades

Значение по умолчанию: true

Разрешить ли обновление транспорта.

perMessageDeflate

История
Версия Изменения
v3.0.0 Расширение permessage-deflate теперь отключено по умолчанию.
v1.4.0 Первая реализация.

Значение по умолчанию: false

Включить ли расширение permessage-deflate для транспорта WebSocket. Известно, что это расширение добавляет значительную нагрузку на производительность и потребление памяти, поэтому рекомендуется включать его только в том случае, если это действительно необходимо.

Обратите внимание, что если perMessageDeflate установлено в false (что является значением по умолчанию), флаг сжатия, используемый при отправке (socket.compress(true).emit(...)) будет игнорироваться при подключении с помощью WebSocket, поскольку расширение permessage-deflate не может быть включено на уровне каждого сообщения.

Поддерживаются все параметры из ws модуля:

const io = new Server(httpServer, {
  perMessageDeflate: {
    threshold: 2048, // defaults to 1024

    zlibDeflateOptions: {
      chunkSize: 8 * 1024, // defaults to 16 * 1024
    },

    zlibInflateOptions: {
      windowBits: 14, // defaults to 15
      memLevel: 7, // defaults to 8
    },

    clientNoContextTakeover: true, // defaults to negotiated value.
    serverNoContextTakeover: true, // defaults to negotiated value.
    serverMaxWindowBits: 10, // defaults to negotiated value.

    concurrencyLimit: 20, // defaults to 10
  }
});

httpCompression

Добавлен в v1.4.0

Значение по умолчанию: true

Включить ли сжатие для HTTP-транспорта с длительным подключением.

Обратите внимание, что если httpCompression установлено в false, флаг сжатия, используемый при отправке (socket.compress(true).emit(...)) будет игнорироваться при подключении с помощью HTTP-запросов с длительным подключением.

Поддерживаются все параметры из Node.js zlib модуля.

Пример:

const io = new Server(httpServer, {
  httpCompression: {
    // Engine.IO options
    threshold: 2048, // defaults to 1024
    // Node.js zlib options
    chunkSize: 8 * 1024, // defaults to 16 * 1024
    windowBits: 14, // defaults to 15
    memLevel: 7, // defaults to 8
  }
});

wsEngine

Значение по умолчанию: require("ws").Server (исходный код можно найти здесь)

Использовать реализацию WebSocket-сервера. См. документацию здесь.

Пример:

const io = new Server(httpServer, {
  wsEngine: require("eiows").Server
});

cors

Значение по умолчанию: -

Список параметров, которые будут переданы cors модулю. Дополнительную информацию можно найти здесь.

Пример:

const io = new Server(httpServer, {
  cors: {
    origin: ["https://example.com", "https://dev.example.com"],
    allowedHeaders: ["my-custom-header"],
    credentials: true
  }
});

cookie

Значение по умолчанию: -

Список параметров, которые будут переданы cookie модулю. Доступные параметры:

  • domain
  • encode
  • expires
  • httpOnly
  • maxAge
  • path
  • sameSite
  • secure

Пример:

import { Server } from "socket.io";

const io = new Server(httpServer, {
  cookie: {
    name: "my-cookie",
    httpOnly: true,
    sameSite: "strict",
    maxAge: 86400
  }
});

С версии Socket.IO v3 по умолчанию cookie больше не отправляется (ссылка).

allowEIO3

Значение по умолчанию: false

Включить ли совместимость с клиентами Socket.IO v2.

См. также: Миграция с 2.x на 3.0

Пример:

const io = new Server(httpServer, {
  allowEIO3: true // false by default
});

© 2014–2021 Automattic
Licensed under the MIT License.
https://socket.io/docs/v4/server-options

Spec-Zone.ru

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