メインコンテンツへスキップ
バージョン: 4.x

サーバーの初期化

Socket.IO サーバーライブラリをインストールしたら、サーバーを初期化できます。すべてのオプションのリストはこちらにあります。

ヒント

TypeScriptユーザーの場合、イベントに型ヒントを提供できます。詳しくはこちらをご確認ください。

初期化

スタンドアロン

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

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

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

io.listen(3000);

最初の引数としてポートを渡すこともできます。

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

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

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

これにより、Node.jsのHTTPサーバーが暗黙的に起動し、io.httpServerを通じてアクセスできます。

HTTPサーバーを使用

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

HTTPSサーバーを使用

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

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

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

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

httpsServer.listen(3000);

参考: Node.jsドキュメント

クライアント証明書認証を使用

サーバー

import { readFileSync } from "fs";
import { createServer } from "https";
import { Server } from "socket.io";

const httpsServer = createServer({
key: readFileSync("/path/to/server-key.pem"),
cert: readFileSync("/path/to/server-cert.pem"),
requestCert: true,
ca: [
readFileSync("/path/to/client-cert.pem")
]
});

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

io.engine.on("connection", (rawSocket) => {
// if you need the certificate details (it is no longer available once the handshake is completed)
rawSocket.peerCertificate = rawSocket.request.client.getPeerCertificate();
});

io.on("connection", (socket) => {
console.log(socket.conn.peerCertificate);
// ...
});

httpsServer.listen(3000);

クライアント

import { readFileSync } from "fs";
import { io } from "socket.io-client";

const socket = io("https://example.com", {
key: readFileSync("/path/to/client-key.pem"),
cert: readFileSync("/path/to/client-cert.pem"),
ca: [
readFileSync("/path/to/server-cert.pem")
]
});

HTTP/2サーバーを使用

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

参考: Node.jsドキュメント

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

app.listen(3000)を使用すると、新しいHTTPサーバーが作成されるため、ここでは機能しません。

詳細についてはこちらを参照してください。

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

詳細についてはこちらを参照してください。

Nestを使用

ドキュメントはこちらを参照してください。

注意

NestJS v7以前はSocket.IO v2に依存し、NestJS v8はSocket.IO v4に依存します。互換性のあるクライアントを使用してください。

Fastifyを使用

fastify-socket.ioプラグインを登録する必要があります

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({ port: 3000 });

µWebSockets.jsを使用

import { App } from "uWebSockets.js";
import { Server } from "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");
}
});

参考: https://github.com/uNetworking/uWebSockets.js

オプション

使用可能なオプションの完全なリストはこちらにあります。