docker-redis - local tests

Signed-off-by: Dave Richer <dave@imexsystems.ca>
This commit is contained in:
Dave Richer
2024-10-02 01:04:05 -04:00
parent ddb0990645
commit 05e5545466
2 changed files with 35 additions and 15 deletions

View File

@@ -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

View File

@@ -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"],