Параметры сервера
Параметры сервера 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" });
}
});
См. также:
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