Server Installation
Prerequisitesβ
Please make sure that Node.js is installed on your system. The current Long Term Support (LTS) release is an ideal starting point, see here.
At least Node.js 10 is needed, older versions are not supported anymore.
Installationβ
To install the latest release:
- NPM
- Yarn
- pnpm
npm install socket.io
yarn add socket.io
pnpm add socket.io
To install a specific version:
- NPM
- Yarn
- pnpm
npm install socket.io@version
yarn add socket.io@version
pnpm add socket.io@version
Latest releasesβ
- 4.6.0 (Feb 2023): GitHub release / diff / npm
- 4.5.4 (Nov 2022): GitHub release / diff / npm
- 4.5.3 (Oct 2022): GitHub release / diff / npm
- 4.5.2 (Sep 2022): GitHub release / diff / npm
- 4.5.1 (May 2022): GitHub release / diff / npm
- 4.5.0 (Apr 2022): GitHub release / diff / npm
- 4.4.1 (Jan 2022): GitHub release / diff / npm
Additional packagesβ
By default, Socket.IO use the WebSocket server provided by the ws package.
There are 2 optional packages that can be installed alongside this package. These packages are binary add-ons which improve certain operations. Prebuilt binaries are available for the most popular platforms so you don't necessarily need to have a C++ compiler installed on your machine.
- bufferutil: Allows to efficiently perform operations such as masking and unmasking the data payload of the WebSocket frames.
- utf-8-validate: Allows to efficiently check if a message contains valid UTF-8 as required by the spec.
To install those packages:
- NPM
- Yarn
- pnpm
npm install --save-optional bufferutil utf-8-validate
yarn add --optional bufferutil utf-8-validate
pnpm add -O bufferutil utf-8-validate
Please note that these packages are optional, the WebSocket server will fallback to the Javascript implementation if they are not available. More information can be found here.
Other WebSocket server implementationsβ
Any Websocket server implementation which exposes the same API as ws (notably the handleUpgrade method) can be used.
For example, you can use the eiows package, which is a fork of the (now deprecated) uws package:
- NPM
- Yarn
- pnpm
npm install eiows
yarn add eiows
pnpm add eiows
And then use the wsEngine
option:
const { Server } = require("socket.io");
const eiows = require("eiows");
const io = new Server(3000, {
wsEngine: eiows.Server
});
This implementation "allows, but doesn't guarantee" significant performance and memory-usage improvements over the default implementation. As usual, please benchmark it against your own usage.
Usage with Β΅WebSockets.js
β
Starting with version 4.4.0, a Socket.IO server can now bind to a Β΅WebSockets.js
server.
Installation:
- NPM
- Yarn
- pnpm
npm install uWebSockets.js@uNetworking/uWebSockets.js#v20.4.0
yarn add uWebSockets.js@uNetworking/uWebSockets.js#v20.4.0
pnpm add uWebSockets.js@uNetworking/uWebSockets.js#v20.4.0
Usage:
const { App } = require("uWebSockets.js");
const { Server } = require("socket.io");
const app = App();
const io = new Server();
io.attachApp(app);
io.on("connection", (socket) => {
// ...
});
app.listen(3000, (token) => {
if (!token) {
console.warn("port already in use");
}
});
Miscellaneousβ
Dependency treeβ
A basic installation of the server includes 21 packages:
βββ¬ socket.io@4.6.0
βββ¬ accepts@1.3.8
β βββ¬ mime-types@2.1.35
β β βββ mime-db@1.52.0
β βββ negotiator@0.6.3
βββ base64id@2.0.0
βββ¬ debug@4.3.4
β βββ ms@2.1.2
βββ¬ engine.io@6.4.0
β βββ @types/cookie@0.4.1
β βββ¬ @types/cors@2.8.13
β β βββ @types/node@18.11.19 deduped
β βββ @types/node@18.11.19
β βββ accepts@1.3.8 deduped
β βββ base64id@2.0.0 deduped
β βββ cookie@0.4.2
β βββ¬ cors@2.8.5
β β βββ object-assign@4.1.1
β β βββ vary@1.1.2
β βββ debug@4.3.4 deduped
β βββ engine.io-parser@5.0.6
β βββ¬ ws@8.11.0
β βββ UNMET OPTIONAL DEPENDENCY bufferutil@^4.0.1
β βββ UNMET OPTIONAL DEPENDENCY utf-8-validate@^5.0.2
βββ¬ socket.io-adapter@2.5.2
β βββ ws@8.11.0 deduped
βββ¬ socket.io-parser@4.2.2
βββ @socket.io/component-emitter@3.1.0
βββ debug@4.3.4 deduped
The type declarations for 3rd party packages are included, in order to ease the use of the library for TypeScript users (but at the cost of a slightly-larger package).
See also: https://github.com/microsoft/types-publisher/issues/81#issuecomment-234051345
Transitive versionsβ
The engine.io
package brings the engine that is responsible for managing the low-level connections (HTTP long-polling or WebSocket). See also: How it works
socket.io version | engine.io version | ws version |
---|---|---|
4.6.x | 6.4.x | 8.11.x |
4.5.x | 6.2.x | 8.2.x |
4.4.x | 6.1.x | 8.2.x |
4.3.x | 6.0.x | 8.2.x |
4.2.x | 5.2.x | 7.4.x |
4.1.x | 5.1.x | 7.4.x |
4.0.x | 5.0.x | 7.4.x |
3.1.x | 4.1.x | 7.4.x |
3.0.x | 4.0.x | 7.4.x |
2.5.x | 3.6.x | 7.4.x |
2.4.x | 3.5.x | 7.4.x |