Aller au contenu principal
Version: 4.x

Server Initialization

Once you have installed the Socket.IO server library, you can now init the server. The complete list of options can be found here.

astuce

For TypeScript users, it is possible to provide type hints for the events. Please check this.

Initialization

Standalone

const { Server } = require("socket.io");

const io = new Server({ /* options */ });

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

io.listen(3000);

You can also pass the port as the first argument:

const { Server } = require("socket.io");

const io = new Server(3000, { /* options */ });

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

This implicitly starts a Node.js HTTP server, which can be accessed through io.httpServer.

With an HTTP server

const { createServer } = require("http");
const { Server } = require("socket.io");

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

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

httpServer.listen(3000);

With an HTTPS server

const { readFileSync } = require("fs");
const { createServer } = require("https");
const { Server } = require("socket.io");

const httpServer = createServer({
key: readFileSync("/path/to/my/key.pem"),
cert: readFileSync("/path/to/my/cert.pem")
});

const io = new Server(httpServer, { /* options */ });

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

httpServer.listen(3000);

See also: Node.js documentation

With an HTTP/2 server

const { readFileSync } = require("fs");
const { createSecureServer } = require("http2");
const { Server } = require("socket.io");

const httpServer = createSecureServer({
allowHTTP1: true,
key: readFileSync("/path/to/my/key.pem"),
cert: readFileSync("/path/to/my/cert.pem")
});

const io = new Server(httpServer, { /* options */ });

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

httpServer.listen(3000);

See also: Node.js documentation

With Express

const express = require("express");
const { createServer } = require("http");
const { Server } = require("socket.io");

const app = express();
const httpServer = createServer(app);
const io = new Server(httpServer, { /* options */ });

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

httpServer.listen(3000);
attention

Using app.listen(3000) will not work here, as it creates a new HTTP server.

More information here.

With Koa

const Koa = require("koa");
const { createServer } = require("http");
const { Server } = require("socket.io");

const app = new Koa();
const httpServer = createServer(app.callback());
const io = new Server(httpServer, { /* options */ });

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

httpServer.listen(3000);

More information here.

With Nest

See the documentation here.

attention

NestJS v7 and below relies on Socket.IO v2, while NestJS v8 relies on Socket.IO v4. Please use a compatible client.

With Fastify

You need to register the fastify-socket.io plugin:

const fastify = require("fastify");
const fastifyIO = require("fastify-socket.io");

const server = fastify();
server.register(fastifyIO);

server.get("/", (req, reply) => {
server.io.emit("hello");
});

server.ready().then(() => {
// we need to wait for the server to be ready, else `server.io` is undefined
server.io.on("connection", (socket) => {
// ...
});
});

server.listen(3000);

With µWebSockets.js

import { App } from "uWebSockets.js";
import { Server } from "socket.io";

const app = new App();
const io = new Server();

io.attachApp(app);

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

app.listen(3000, (token) => {
if (!token) {
console.warn("port already in use");
}
});

Reference: https://github.com/uNetworking/uWebSockets.js

Options

The complete list of available options can be found here.