[英]@socket.io/redis-adapter and redis; sub client doesn't reconnect after error
鑒於我正在導入這些包:
import {Socket, Server} from 'socket.io'; // @4.4.1
import {createClient} from 'redis'; // @4.0.4
import {createAdapter} from '@socket.io/redis-adapter'; // @7.1.0
import {Server as HttpServer} from 'http'; // npm@8.5.5, node@v17.7.0
我有一個我創建的服務器:
const http = HttpServer // from 'http', creation not in this code
const io = new Server(http, {
path: '/socket/v1/tunnel',
serveClient: false,
cookie: false,
pingTimeout: 295000,
pingInterval: 300000,
});
和我創建的 Redis 個發布/訂閱客戶端:
const pubClient = createClient({
url: redisAddress,
});
const subClient = pubClient.duplicate();
在我擁有這些之后,我連接 Redis 客戶端並將它們添加到適配器(在io
中),如下所示:
Promise.all([pubClient.connect(), subClient.connect()]).then(() => {
io.adapter(createAdapter(pubClient, subClient));
...
}
有了上面的內容,我就有了一個可以工作的套接字服務器。 我的問題是每隔約 1 小時我與 Redis 客戶端的連接就會出錯。 pubClient 立即重新連接(正如我預期的那樣,按照文檔),但 subClient 出錯並且不會重新連接。
我可以從其他系統向 Redis 中的房間發送消息,當此子客戶端已連接時,消息會傳遞到適當的設備。 在 subClient 第一次出錯后(它在大約 1 小時的間隔內相當可預測)它不會重新連接,這意味着發送到 Redis 的房間不再被路由到它們的目的地。
我有幾個問題:
subClient.on('error', () => {...}
的處理程序中添加一個subClient.connect()
,還是我配置不正確並且應該使用 createClient({. ..})?此問題是由 redis package 引起的。redis@4 未正確重新連接發布/訂閱頻道(當前為 v4.0.4)。 將 redis 降級到 v3.1.2 完全解決了重新連接問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.