docker-redis - local tests
Signed-off-by: Dave Richer <dave@imexsystems.ca>
This commit is contained in:
@@ -66,6 +66,15 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- .:/app
|
- .:/app
|
||||||
- /app/node_modules # Prevents overwriting node_modules
|
- /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:
|
networks:
|
||||||
redis-cluster-net:
|
redis-cluster-net:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|||||||
41
server.js
41
server.js
@@ -11,7 +11,7 @@ const Redis = require("ioredis");
|
|||||||
const { createAdapter } = require("@socket.io/redis-adapter");
|
const { createAdapter } = require("@socket.io/redis-adapter");
|
||||||
const logger = require("./server/utils/logger");
|
const logger = require("./server/utils/logger");
|
||||||
const { redisSocketEvents } = require("./server/web-sockets/redisSocketEvents");
|
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 { isString, isEmpty } = require("lodash");
|
||||||
const applyRedisHelpers = require("./server/utils/redisHelpers");
|
const applyRedisHelpers = require("./server/utils/redisHelpers");
|
||||||
@@ -103,18 +103,14 @@ const applyRoutes = (app) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
const connectToRedisCluster = () => {
|
||||||
* Apply Redis to the server
|
|
||||||
* @param server
|
|
||||||
* @param app
|
|
||||||
*/
|
|
||||||
const applySocketIO = async (server, app) => {
|
|
||||||
const redisCluster = new Redis.Cluster(
|
const redisCluster = new Redis.Cluster(
|
||||||
process.env.REDIS_URL
|
process.env.REDIS_URL
|
||||||
? JSON.parse(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
|
// Handle errors
|
||||||
redisCluster.on("error", (err) => {
|
redisCluster.on("error", (err) => {
|
||||||
logger.log(`[${process.env.NODE_ENV}] Redis ERROR`, "ERROR", "redis", "api");
|
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"));
|
pubClient.on("error", (err) => logger.log(`Redis pubClient error: ${err}`, "ERROR", "redis"));
|
||||||
subClient.on("error", (err) => logger.log(`Redis subClient 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 () => {
|
process.on("SIGINT", async () => {
|
||||||
logger.log("Closing Redis connections...", "INFO", "redis", "api");
|
logger.log("Closing Redis connections...", "INFO", "redis", "api");
|
||||||
await Promise.all([pubClient.disconnect(), subClient.disconnect()]);
|
await Promise.all([pubClient.disconnect(), subClient.disconnect()]);
|
||||||
@@ -161,6 +171,7 @@ const applySocketIO = async (server, app) => {
|
|||||||
const ioRedis = new Server(server, {
|
const ioRedis = new Server(server, {
|
||||||
path: "/wss",
|
path: "/wss",
|
||||||
adapter: createAdapter(pubClient, subClient),
|
adapter: createAdapter(pubClient, subClient),
|
||||||
|
store: new RedisStore(pubClient, subClient),
|
||||||
cors: {
|
cors: {
|
||||||
origin: SOCKETIO_CORS_ORIGIN,
|
origin: SOCKETIO_CORS_ORIGIN,
|
||||||
methods: ["GET", "POST"],
|
methods: ["GET", "POST"],
|
||||||
|
|||||||
Reference in New Issue
Block a user