Инициализация сервера
После установки библиотеки сервера 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); |
С 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); |
С 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
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