diff --git a/node_utils.js b/node_utils.js index e237b14318..0fc5a37189 100644 --- a/node_utils.js +++ b/node_utils.js @@ -50,13 +50,27 @@ function get_conf() { if (process.env.FRAPPE_SOCKETIO_PORT) { conf.socketio_port = process.env.FRAPPE_SOCKETIO_PORT; } + if (process.env.FRAPPE_SOCKETIO_UDS) { + conf.socketio_uds = process.env.FRAPPE_SOCKETIO_UDS; + } return conf; } function get_redis_subscriber(kind = "redis_queue", options = {}) { const conf = get_conf(); - const host = conf[kind]; - return redis.createClient({ url: host, ...options }); + const connStr = conf[kind]; + let client; + // TODO: revise after https://github.com/redis/node-redis/issues/2530 + // is solved for a more elegant implementation + if (connStr && connStr.startsWith("unix://")) { + client = redis.createClient({ + socket: { path: connStr.replace("unix://", "") }, + ...options, + }); + } else { + client = redis.createClient({ url: connStr, ...options }); + } + return client; } module.exports = { diff --git a/realtime/index.js b/realtime/index.js index 2fc873b863..338a6a1956 100644 --- a/realtime/index.js +++ b/realtime/index.js @@ -1,9 +1,12 @@ const { Server } = require("socket.io"); +const http = require("node:http"); const { get_conf, get_redis_subscriber } = require("../node_utils"); const conf = get_conf(); -let io = new Server({ +const server = http.createServer(); + +let io = new Server(server, { cors: { // Should be fine since we are ensuring whether hostname and origin are same before adding setting listeners for s socket origin: true, @@ -55,6 +58,8 @@ const subscriber = get_redis_subscriber(); })(); // ======================= +let uds = conf.socketio_uds; let port = conf.socketio_port; -io.listen(port); -console.log("Realtime service listening on: ", port); +server.listen(uds || port, () => { + console.log("Realtime service listening on: ", uds || port); +});