Skip to main content
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.

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("app");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);
caution

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.

caution

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);

Options#

The complete list of available options can be found here.