サーバーのインストール
最新のリリースは現在4.7.5
で、2024年3月にリリースされました。
リリースノートはこちらをご覧ください。
前提条件
システムにNode.jsがインストールされていることを確認してください。現在の長期サポート(LTS)リリースが理想的な出発点です。こちらを参照してください。
少なくともNode.js 10が必要です。それより古いバージョンはサポートされなくなりました。
インストール
最新のリリースをインストールするには
- NPM
- Yarn
- pnpm
npm install socket.io
yarn add socket.io
pnpm add socket.io
特定のバージョンをインストールするには
- NPM
- Yarn
- pnpm
npm install socket.io@version
yarn add socket.io@version
pnpm add socket.io@version
追加パッケージ
デフォルトでは、Socket.IO はwsパッケージによって提供されるWebSocketサーバーを使用します。
このパッケージと一緒にインストールできるオプションのパッケージが2つあります。これらのパッケージはバイナリアドオンであり、特定の操作を改善します。最も一般的なプラットフォームでは事前にビルドされたバイナリが利用できるため、マシンにC++コンパイラをインストールする必要はありません。
- bufferutil:WebSocketフレームのデータペイロードのマスクとアンマスクなどの操作を効率的に実行できます。
- utf-8-validate:仕様で要求されるように、メッセージに有効なUTF-8が含まれているかを効率的に確認できます。
これらのパッケージをインストールするには
- 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
これらのパッケージはオプションです。利用できない場合は、WebSocketサーバーはJavaScriptの実装にフォールバックします。詳細についてはこちらを参照してください。
その他のWebSocketサーバー実装
wsと同じAPI(特にhandleUpgradeメソッド)を公開するWebsocketサーバー実装を使用できます。
たとえば、(現在は非推奨の)uwsパッケージのフォークであるeiowsパッケージを使用できます。
- NPM
- Yarn
- pnpm
npm install eiows
yarn add eiows
pnpm add eiows
そして、wsEngine
オプションを使用します。
const { Server } = require("socket.io");
const eiows = require("eiows");
const io = new Server(3000, {
wsEngine: eiows.Server
});
この実装は、デフォルトの実装よりもパフォーマンスとメモリ使用量の改善を「許可しますが、保証しません」。通常どおり、ご自身の使用状況に合わせてベンチマークしてください。
µWebSockets.js
との使用
バージョン4.4.0から、Socket.IOサーバーはµWebSockets.js
サーバーにバインドできるようになりました。
インストール
- 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
使用方法
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");
}
});
その他
依存関係ツリー
サーバーの基本的なインストールには**21**個のパッケージが含まれており、そのうち**6**個は当社のチームが保守しています。
└─┬ socket.io@4.7.2
├─┬ accepts@1.3.8
│ ├─┬ mime-types@2.1.35
│ │ └── mime-db@1.52.0
│ └── negotiator@0.6.3
├── base64id@2.0.0
├─┬ cors@2.8.5
│ ├── object-assign@4.1.1
│ └── vary@1.1.2
├─┬ debug@4.3.4
│ └── ms@2.1.2
├─┬ engine.io@6.5.2
│ ├── @types/cookie@0.4.1
│ ├─┬ @types/cors@2.8.13
│ │ └── @types/node@20.4.6 deduped
│ ├── @types/node@20.4.6
│ ├── accepts@1.3.8 deduped
│ ├── base64id@2.0.0 deduped
│ ├── cookie@0.4.2
│ ├── cors@2.8.5 deduped
│ ├── debug@4.3.4 deduped
│ ├── engine.io-parser@5.2.1
│ └─┬ 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.4
├── @socket.io/component-emitter@3.1.0
└── debug@4.3.4 deduped
サードパーティパッケージの型宣言が含まれているため、TypeScriptユーザーがライブラリを簡単に使用できます(ただし、パッケージサイズがわずかに大きくなります)。
参照:https://github.com/microsoft/types-publisher/issues/81#issuecomment-234051345
推移的なバージョン
engine.io
パッケージは、低レベル接続(HTTPロングポーリングまたはWebSocket)を管理するエンジンを提供します。参照:動作原理
socket.io バージョン | engine.io バージョン | ws バージョン |
---|---|---|
4.7.x | 6.5.x | 8.11.x |
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 |