From 05e554546634e732a69d1e096041733e9dd44002 Mon Sep 17 00:00:00 2001 From: Dave Richer Date: Wed, 2 Oct 2024 01:04:05 -0400 Subject: [PATCH] docker-redis - local tests Signed-off-by: Dave Richer --- docker-compose.yml | 9 +++++++++ server.js | 41 ++++++++++++++++++++++++++--------------- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 4bcad6f73..7b867c0e3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -66,6 +66,15 @@ services: volumes: - .:/app - /app/node_modules # Prevents overwriting node_modules + + socketio-admin-ui: + image: maitrungduc1410/socket.io-admin-ui + container_name: socketio-admin-ui + networks: + - redis-cluster-net + ports: + - "3333:80" + networks: redis-cluster-net: driver: bridge diff --git a/server.js b/server.js index 8800f6632..e0bdd0a2e 100644 --- a/server.js +++ b/server.js @@ -11,7 +11,7 @@ const Redis = require("ioredis"); const { createAdapter } = require("@socket.io/redis-adapter"); const logger = require("./server/utils/logger"); const { redisSocketEvents } = require("./server/web-sockets/redisSocketEvents"); -const { instrument } = require("@socket.io/admin-ui"); +const { instrument, RedisStore } = require("@socket.io/admin-ui"); const { isString, isEmpty } = require("lodash"); const applyRedisHelpers = require("./server/utils/redisHelpers"); @@ -103,18 +103,14 @@ const applyRoutes = (app) => { }); }; -/** - * Apply Redis to the server - * @param server - * @param app - */ -const applySocketIO = async (server, app) => { +const connectToRedisCluster = () => { const redisCluster = new Redis.Cluster( process.env.REDIS_URL ? JSON.parse(process.env.REDIS_URL) : [ { - host: "redis://localhost:6379" + host: "localhost", + port: 6379 } ], { @@ -131,6 +127,27 @@ const applySocketIO = async (server, app) => { } ); + return new Promise((resolve, reject) => { + redisCluster.on("ready", () => { + logger.log(`[${process.env.NODE_ENV}] Redis cluster connection established.`, "INFO", "redis", "api"); + resolve(redisCluster); + }); + + redisCluster.on("error", (err) => { + logger.log(`[${process.env.NODE_ENV}] Redis cluster connection failed: ${err.message}`, "ERROR", "redis", "api"); + reject(err); + }); + }); +}; + +/** + * Apply Redis to the server + * @param server + * @param app + */ +const applySocketIO = async (server, app) => { + const redisCluster = await connectToRedisCluster(); + // Handle errors redisCluster.on("error", (err) => { logger.log(`[${process.env.NODE_ENV}] Redis ERROR`, "ERROR", "redis", "api"); @@ -145,13 +162,6 @@ const applySocketIO = async (server, app) => { pubClient.on("error", (err) => logger.log(`Redis pubClient error: ${err}`, "ERROR", "redis")); subClient.on("error", (err) => logger.log(`Redis subClient error: ${err}`, "ERROR", "redis")); - // try { - // // await Promise.all([pubClient.connect(), subClient.connect()]); - // // logger.log(`[${process.env.NODE_ENV}] Connected to Redis`, "INFO", "redis", "api"); - // // } catch (redisError) { - // // logger.log("Failed to connect to Redis", "ERROR", "redis", redisError); - // // } - process.on("SIGINT", async () => { logger.log("Closing Redis connections...", "INFO", "redis", "api"); await Promise.all([pubClient.disconnect(), subClient.disconnect()]); @@ -161,6 +171,7 @@ const applySocketIO = async (server, app) => { const ioRedis = new Server(server, { path: "/wss", adapter: createAdapter(pubClient, subClient), + store: new RedisStore(pubClient, subClient), cors: { origin: SOCKETIO_CORS_ORIGIN, methods: ["GET", "POST"],