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

Redis Streams アダプター

仕組み

このアダプターは、Socket.IOサーバー間でパケットを転送するために、Redis ストリームを使用します。

既存のRedisアダプター(Redis Pub/Subメカニズムを使用)との主な違いは、このアダプターがRedisサーバーへの一時的な接続断を適切に処理し、パケットを失うことなくストリームを再開することです。

注記

  • すべての名前空間で単一のストリームが使用されます
  • maxLenオプションでストリームのサイズを制限できます
  • Redis PUB/SUBメカニズムに基づくアダプターとは異なり、このアダプターはRedisサーバーへの一時的な接続断を適切に処理し、ストリームを再開します
  • 接続状態の復旧が有効になっている場合、セッションはクラシックなキー/値ペアとしてRedisに保存されます。

ソースコード: https://github.com/socketio/socket.io-redis-streams-adapter

サポートされる機能

機能socket.io バージョンサポート
ソケット管理4.0.0✅ YES (バージョン 0.1.0 以降)
サーバー間通信4.1.0✅ YES (バージョン 0.1.0 以降)
確認応答付きブロードキャスト4.5.0✅ YES (バージョン 0.1.0 以降)
接続状態の復旧4.6.0✅ YES (バージョン 0.1.0 以降)

インストール

npm install @socket.io/redis-streams-adapter redis

使い方

redis パッケージを使用する場合

import { createClient } from "redis";
import { Server } from "socket.io";
import { createAdapter } from "@socket.io/redis-streams-adapter";

const redisClient = createClient({ url: "redis://localhost:6379" });

await redisClient.connect();

const io = new Server({
adapter: createAdapter(redisClient)
});

io.listen(3000);

redis パッケージと Redis クラスターを使用する場合

import { createCluster } from "redis";
import { Server } from "socket.io";
import { createAdapter } from "@socket.io/redis-streams-adapter";

const redisClient = createCluster({
rootNodes: [
{
url: "redis://localhost:7000",
},
{
url: "redis://localhost:7001",
},
{
url: "redis://localhost:7002",
},
],
});

await redisClient.connect();

const io = new Server({
adapter: createAdapter(redisClient)
});

io.listen(3000);

ioredis パッケージを使用する場合

import { Redis } from "ioredis";
import { Server } from "socket.io";
import { createAdapter } from "@socket.io/redis-streams-adapter";

const redisClient = new Redis();

const io = new Server({
adapter: createAdapter(redisClient)
});

io.listen(3000);

ioredis パッケージと Redis クラスターを使用する場合

import { Cluster } from "ioredis";
import { Server } from "socket.io";
import { createAdapter } from "@socket.io/redis-streams-adapter";

const redisClient = new Cluster([
{
host: "localhost",
port: 7000,
},
{
host: "localhost",
port: 7001,
},
{
host: "localhost",
port: 7002,
},
]);

const io = new Server({
adapter: createAdapter(redisClient)
});

io.listen(3000);

オプション

名前説明デフォルト値
streamNameRedisストリームの名前。socket.io
maxLenストリームの最大サイズ。ほぼ正確なトリミング (~) が使用されます。10_000
readCountXREAD呼び出しごとにフェッチする要素の数。100
sessionKeyPrefix接続状態の復旧機能が有効になっている場合に、Socket.IOセッションを保存するために使用されるキーのプレフィックス。sio:session
heartbeatInterval2つのハートビート間のミリ秒数。5_000
heartbeatTimeoutノードがダウンしたとみなすまでのハートビートなしのミリ秒数。10_000

よくある質問

Redis Streams アダプターを使用する場合でも、スティッキーセッションを有効にする必要はありますか?

はい。そうしないと、HTTP 400レスポンスが発生します(Socket.IOセッションを認識していないサーバーにアクセスしています)。

詳細については、こちらをご覧ください。

Redisサーバーがダウンした場合どうなりますか?

クラシックなRedisアダプターとは異なり、このアダプターはRedisサーバーへの一時的な接続断を適切に処理し、パケットを失うことなくストリームを再開します。

最新リリース

バージョンリリース日リリースノート差分
0.2.12024年3月リンク0.2.0...0.2.1
0.2.02024年2月リンク0.1.0...0.2.0
0.1.02023年4月リンク

完全な変更履歴