Spec-Zone.ru › Socket.IO 3

Инициализация сервера

После установки библиотеки сервера Socket.IO, вы можете теперь инициализировать сервер. Полный список опций можно найти ниже.

Синтаксис

CommonJS

const httpServer = require("http").createServer();
const io = require("socket.io")(httpServer, {
  // ...
});

io.on("connection", (socket) => {
  // ...
});

httpServer.listen(3000);

ES модули

Пожалуйста, ознакомьтесь с этой страницей для включения ECMAScript модулей в ваш проект Node.js.

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

const httpServer = createServer();
const io = new Server(httpServer, {
  // ...
});

io.on("connection", (socket) => {
  // ...
});

httpServer.listen(3000);

TypeScript

Socket.IO теперь имеет поддержку TypeScript:

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

const httpServer = createServer();
const io = new Server(httpServer, {
  // ...
});

io.on("connection", (socket: Socket) => {
  // ...
});

httpServer.listen(3000);

Инициализация

Отдельно стоящий

const options = { /* ... */ };
const io = require("socket.io")(options);

io.on("connection", socket => { /* ... */ });

io.listen(3000);

Вы также можете передать порт в качестве первого аргумента:

const options = { /* ... */ };
const io = require("socket.io")(3000, options);

io.on("connection", socket => { /* ... */ });

Это неявно запускает Node.js HTTP-сервер, к которому можно получить доступ через io.httpServer.

Прикрепление к существующему HTTP-серверу

С HTTP-сервером

const httpServer = require("http").createServer();
const options = { /* ... */ };
const io = require("socket.io")(httpServer, options);

io.on("connection", socket => { /* ... */ });

httpServer.listen(3000);

С HTTPS-сервером

const fs = require("fs");
const httpServer = require("https").createServer({
  key: fs.readFileSync("/tmp/key.pem"),
  cert: fs.readFileSync("/tmp/cert.pem")
});
const options = { /* ... */ };
const io = require("socket.io")(httpServer, options);

io.on("connection", socket => { /* ... */ });

httpServer.listen(3000);

Документация Node.js

С HTTP/2-сервером

const fs = require("fs");
const httpServer = require("http2").createSecureServer({
  allowHTTP1: true,
  key: fs.readFileSync("/tmp/key.pem"),
  cert: fs.readFileSync("/tmp/cert.pem")
});
const options = { /* ... */ };
const io = require("socket.io")(httpServer, options);

io.on("connection", socket => { /* ... */ });

httpServer.listen(3000);

Документация Node.js

С Express

const app = require("express")();
const httpServer = require("http").createServer(app);
const options = { /* ... */ };
const io = require("socket.io")(httpServer, options);

io.on("connection", socket => { /* ... */ });

httpServer.listen(3000);
// WARNING !!! app.listen(3000); will not work here, as it creates a new HTTP server

Дополнительная информация здесь.

С Koa

const app = require("koa")();
const httpServer = require("http").createServer(app.callback());
const options = { /* ... */ };
const io = require("socket.io")(httpServer, options);

io.on("connection", socket => { /* ... */ });

httpServer.listen(3000);

Дополнительная информация здесь.

Опции

  • Опции сервера Socket.IO
    • путь
    • serveClient
    • адаптер
    • парсер
    • connectTimeout
  • Опции низкоуровневого движка
    • pingTimeout
    • pingInterval
    • upgradeTimeout
    • maxHttpBufferSize
    • allowRequest
    • транспорты
    • allowUpgrades
    • perMessageDeflate
    • httpCompression
    • wsEngine
    • CORS
    • cookie
    • allowEIO3

Опции сервера Socket.IO

path

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

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

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

Сервер

const httpServer = require("http").createServer();
const io = require("socket.io")(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

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

Используемый “адаптер”.

Пример с адаптером Redis (пакет socket.io-redis, дополнительная информация здесь):

const httpServer = require("http").createServer();
const redisClient = require("redis").createClient();
const io = require("socket.io")(httpServer, {
  adapter: require("socket.io-redis")({
    pubClient: redisClient,
    subClient: redisClient.duplicate()
  })
});

parser

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

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

connectTimeout

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

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

Опции низкоуровневого движка

pingTimeout

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

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

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

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

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

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

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

const io = require("socket.io")(httpServer, {
  pingTimeout: 30000
});

pingInterval

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

См. выше.

upgradeTimeout

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

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

maxHttpBufferSize

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

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

const io = require("socket.io")(httpServer, {
  maxHttpBufferSize: 1e8
});

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

allowRequest

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

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

Пример:

const io = require("socket.io")(httpServer, {
  allowRequest: (req, callback) => {
    const isOriginValid = check(req);
    callback(null, isOriginValid);
  }
});

transports

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

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

См. также: клиентская сторона transports

allowUpgrades

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

Разрешить ли апгрейды транспорта.

perMessageDeflate

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

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

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

Пример:

const io = require("socket.io")(httpServer, {
  perMessageDeflate: {
    threshold: 1024
  }
});

httpCompression

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

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

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

Пример:

const io = require("socket.io")(httpServer, {
  httpCompression: {
    threshold: 1024
  }
});

wsEngine

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

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

Пример:

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

cors

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

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

Пример:

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

cookie

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

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

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

Пример:

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

allowEIO3

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

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

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

Пример:

const io = require("socket.io")(httpServer, {
  allowEIO3: true // false by default
});

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

Spec-Zone.ru

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