Ana içeriğe geç

Redis Akış Adaptörü

Nasıl çalışır

Adaptör, Socket.IO sunucuları arasında paketleri yönlendirmek için bir Redis akışı kullanacaktır.

Mevcut Redis adaptörüyle (ki bu Redis Pub/Sub mekanizmasını kullanır) ana fark, bu adaptörün Redis sunucusundaki her türlü geçici bağlantı kopmasını doğru bir şekilde ele alması ve akışı kayıp olmadan yeniden başlatmasıdır.

ipucu

Tüm ad alanları için tek bir akış kullanılır.

  • maxLen seçeneği akışın boyutunu sınırlamaya olanak tanır.
  • Redis PUB/SUB mekanizmasına dayalı adaptörün aksine, bu adaptör Redis sunucusundaki her türlü geçici bağlantı kopmasını doğru bir şekilde ele alır ve akışı yeniden başlatır.
  • bağlantı durumu kurtarma etkinleştirildiyse, oturumlar Redis'te klasik bir anahtar/değer çifti olarak saklanır.

Kaynak kodu: GitHub — Socket.IO Redis Streams Adapter

Desteklenen özellikler

Özelliksocket.io sürümüDestek
Socket yönetimi4.0.0✅ EVET (sürüm 0.1.0 itibarıyla)
Sunucular arası iletişim4.1.0✅ EVET (sürüm 0.1.0 itibarıyla)
Onay ile yayım4.5.0✅ EVET (sürüm 0.1.0 itibarıyla)
Bağlantı durumu kurtarma4.6.0✅ EVET (sürüm 0.1.0 itibarıyla)

Kurulum

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

Kullanım

redis paketi ile

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 paketi ile ve bir Redis kümesi

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 paketi ile

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 paketi ile ve bir Redis kümesi

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

Seçenekler

İsimAçıklamaVarsayılan değer
streamNameRedis akışının adı.socket.io
maxLenAkışın maksimum boyutu. Neredeyse tam kesim (~) kullanılır.10_000
readCountHer XREAD çağrısında alınacak öğe sayısı.100
sessionKeyPrefixBağlantı durumu kurtarma özelliği etkin olduğunda Socket.IO oturumunu depolamak için kullanılan anahtarın ön eki.sio:session:
heartbeatIntervalİki kalp atışı arasında geçen ms sayısı.5_000
heartbeatTimeoutKalp atışı olmadan geçen ms sayısı dolayısıyla bir düğümün kapalı olarak kabul edilmesi.10_000

Sıkça sorulan sorular

Redis Akış adaptörünü kullanırken hâlâ yapışkan oturumları etkinleştirmem gerekiyor mu?

Evet. Bunu yapmamak, HTTP 400 yanıtları ile sonuçlanacaktır (Socket.IO oturumunu bilmeyen bir sunucuya ulaşıyorsunuz).

Daha fazla bilgi için buraya bakabilirsiniz.

Redis sunucusu kapalıyken ne olur?

Klasik Redis adaptörü ile karşılaştırıldığında, bu adaptör Redis sunucusundaki her türlü geçici bağlantı kopmasını doğru bir şekilde ele alır ve akışı kayıp olmadan yeniden başlatır.

En son sürümler

SürümYayın tarihiYayın notlarıFark
0.2.1Mart 2024link0.2.0...0.2.1
0.2.0Şubat 2024link0.1.0...0.2.0
0.1.0Nisan 2023link

Tamamı değişiklik kaydı