cloudcms-server 0.9.257 → 0.9.262
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/broadcast/providers/redis.js +1 -1
- package/clients/redis.js +18 -2
- package/framework/controllers.js +4 -4
- package/launchpad/index.js +174 -11
- package/launchpad/launchers/cluster.js +103 -107
- package/launchpad/launchers/redis.js +84 -0
- package/launchpad/launchers/single.js +36 -22
- package/locks/locks.js +4 -3
- package/locks/providers/cluster.js +1 -1
- package/locks/providers/memory.js +1 -1
- package/locks/providers/redis.js +57 -48
- package/middleware/authentication/providers/saml.js +1 -1
- package/middleware/awareness/awareness.js +51 -29
- package/middleware/awareness/providers/abstract-async.js +109 -70
- package/middleware/awareness/providers/abstract.js +1 -1
- package/middleware/awareness/providers/memory.js +0 -14
- package/middleware/awareness/providers/redis.js +113 -232
- package/middleware/cache/providers/redis.js +17 -21
- package/middleware/cloudcms/cloudcms.js +5 -1
- package/middleware/proxy/proxy.js +2 -1
- package/middleware/stores/stores.js +2 -2
- package/middleware/virtual-config/virtual-config.js +4 -4
- package/middleware/wcm/wcm.js +4 -4
- package/package.json +11 -6
- package/server/index.js +610 -576
- package/temp/clusterlock/index.js +2 -0
- package/temp/passport-saml/LICENSE +23 -0
- package/temp/passport-saml/README.md +406 -0
- package/temp/passport-saml/lib/node-saml/algorithms.d.ts +5 -0
- package/temp/passport-saml/lib/node-saml/algorithms.js +41 -0
- package/temp/passport-saml/lib/node-saml/algorithms.js.map +1 -0
- package/temp/passport-saml/lib/node-saml/index.d.ts +3 -0
- package/temp/passport-saml/lib/node-saml/index.js +6 -0
- package/temp/passport-saml/lib/node-saml/index.js.map +1 -0
- package/temp/passport-saml/lib/node-saml/inmemory-cache-provider.d.ts +45 -0
- package/temp/passport-saml/lib/node-saml/inmemory-cache-provider.js +86 -0
- package/temp/passport-saml/lib/node-saml/inmemory-cache-provider.js.map +1 -0
- package/temp/passport-saml/lib/node-saml/saml-post-signing.d.ts +3 -0
- package/temp/passport-saml/lib/node-saml/saml-post-signing.js +15 -0
- package/temp/passport-saml/lib/node-saml/saml-post-signing.js.map +1 -0
- package/temp/passport-saml/lib/node-saml/saml.d.ts +77 -0
- package/temp/passport-saml/lib/node-saml/saml.js +1170 -0
- package/temp/passport-saml/lib/node-saml/saml.js.map +1 -0
- package/temp/passport-saml/lib/node-saml/types.d.ts +95 -0
- package/temp/passport-saml/lib/node-saml/types.js +8 -0
- package/temp/passport-saml/lib/node-saml/types.js.map +1 -0
- package/temp/passport-saml/lib/node-saml/utility.d.ts +3 -0
- package/temp/passport-saml/lib/node-saml/utility.js +19 -0
- package/temp/passport-saml/lib/node-saml/utility.js.map +1 -0
- package/temp/passport-saml/lib/node-saml/xml.d.ts +21 -0
- package/temp/passport-saml/lib/node-saml/xml.js +140 -0
- package/temp/passport-saml/lib/node-saml/xml.js.map +1 -0
- package/temp/passport-saml/lib/passport-saml/index.d.ts +6 -0
- package/temp/passport-saml/lib/passport-saml/index.js +11 -0
- package/temp/passport-saml/lib/passport-saml/index.js.map +1 -0
- package/temp/passport-saml/lib/passport-saml/multiSamlStrategy.d.ts +13 -0
- package/temp/passport-saml/lib/passport-saml/multiSamlStrategy.js +63 -0
- package/temp/passport-saml/lib/passport-saml/multiSamlStrategy.js.map +1 -0
- package/temp/passport-saml/lib/passport-saml/strategy.d.ts +20 -0
- package/temp/passport-saml/lib/passport-saml/strategy.js +167 -0
- package/temp/passport-saml/lib/passport-saml/strategy.js.map +1 -0
- package/temp/passport-saml/lib/passport-saml/types.d.ts +51 -0
- package/temp/passport-saml/lib/passport-saml/types.js +11 -0
- package/temp/passport-saml/lib/passport-saml/types.js.map +1 -0
- package/temp/passport-saml/package.json +96 -0
- package/util/auth.js +1 -1
- package/util/cloudcms.js +6 -6
- package/util/proxy-factory.js +22 -7
- package/util/util.js +1 -1
- package/launchpad/launchers/sticky-cluster.js +0 -43
- package/web/socket.io/socket.io.js +0 -4240
package/README.md
CHANGED
package/clients/redis.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var redis = require("redis");
|
|
1
|
+
//var redis = require("redis");
|
|
2
2
|
var redisHelper = require("../util/redis");
|
|
3
3
|
|
|
4
4
|
var clients = {};
|
|
@@ -10,18 +10,34 @@ var clients = {};
|
|
|
10
10
|
*/
|
|
11
11
|
exports = module.exports = {};
|
|
12
12
|
|
|
13
|
-
var create = exports.create = function(config, callback)
|
|
13
|
+
var create = exports.create = function(config, baseOptions, callback)
|
|
14
14
|
{
|
|
15
15
|
if (typeof(config) === "function") {
|
|
16
16
|
callback = config;
|
|
17
17
|
config = {};
|
|
18
|
+
baseOptions = {};
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (typeof(baseOptions) === "function") {
|
|
22
|
+
callback = baseOptions;
|
|
23
|
+
baseOptions = {};
|
|
18
24
|
}
|
|
19
25
|
|
|
20
26
|
if (!config) {
|
|
21
27
|
config = {};
|
|
22
28
|
}
|
|
23
29
|
|
|
30
|
+
if (!baseOptions) {
|
|
31
|
+
baseOptions = {};
|
|
32
|
+
}
|
|
33
|
+
|
|
24
34
|
var redisOptions = redisHelper.redisOptions(config);
|
|
35
|
+
if (baseOptions) {
|
|
36
|
+
for (var k in baseOptions) {
|
|
37
|
+
redisOptions[k] = baseOptions[k];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
25
41
|
var url = redisOptions.url;
|
|
26
42
|
|
|
27
43
|
// cached client?
|
package/framework/controllers.js
CHANGED
|
@@ -163,10 +163,10 @@ var handleInvalidate = function(req, res)
|
|
|
163
163
|
// new timestamp
|
|
164
164
|
process.env.CLOUDCMS_APPSERVER_TIMESTAMP = new Date().getTime();
|
|
165
165
|
|
|
166
|
-
// update all socket clients
|
|
167
|
-
process.IO.sockets.emit("timestamp", {
|
|
168
|
-
|
|
169
|
-
});
|
|
166
|
+
// // update all socket clients
|
|
167
|
+
// process.IO.sockets.emit("timestamp", {
|
|
168
|
+
// "timestamp": process.env.CLOUDCMS_APPSERVER_TIMESTAMP
|
|
169
|
+
// });
|
|
170
170
|
|
|
171
171
|
console.log("Server timestamp regenerated");
|
|
172
172
|
|
package/launchpad/index.js
CHANGED
|
@@ -1,17 +1,180 @@
|
|
|
1
|
-
|
|
1
|
+
const cluster = require("cluster");
|
|
2
|
+
|
|
3
|
+
// Handle uncaught exceptions...
|
|
4
|
+
process.on('uncaughtException', function(err, source) {
|
|
5
|
+
// if (err === "read ECONNRESET")
|
|
6
|
+
// {
|
|
7
|
+
// // skip
|
|
8
|
+
// }
|
|
9
|
+
// else
|
|
10
|
+
// {
|
|
11
|
+
console.log(`Launchpad - process received event 'uncaughtException': ${err}, source: ${source}`);
|
|
12
|
+
console.log(err.stack);
|
|
13
|
+
// }
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
module.exports = function(type, config, options)
|
|
2
17
|
{
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
options.setup = process.env.CLOUDCMS_LAUNCHPAD_SETUP;
|
|
18
|
+
if (!type) {
|
|
19
|
+
type = process.env.CLOUDCMS_LAUNCHPAD_SETUP;
|
|
6
20
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
21
|
+
if (!type) {
|
|
22
|
+
type = "single";
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
process.env.CLOUDCMS_LAUNCHPAD_SETUP = type
|
|
26
|
+
|
|
27
|
+
var launcherFactory = require("./launchers/" + type);
|
|
28
|
+
if (!launcherFactory)
|
|
29
|
+
{
|
|
30
|
+
throw new Error("Cannot find launcher factory: " + type);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
var launcher = launcherFactory(config);
|
|
34
|
+
|
|
35
|
+
var reportFn = options.report;
|
|
36
|
+
if (!reportFn) {
|
|
37
|
+
options.report = reportFn = function () {};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
var completionFn = options.complete;
|
|
41
|
+
if (!completionFn) {
|
|
42
|
+
options.complete = completionFn = function(err) {
|
|
43
|
+
throw new Error(err);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
var fork = true;
|
|
48
|
+
if (type === "single") {
|
|
49
|
+
fork = false;
|
|
11
50
|
}
|
|
51
|
+
|
|
52
|
+
if (!fork)
|
|
53
|
+
{
|
|
54
|
+
return launchWorker(launcher, config, options, function(err, app, httpServer) {
|
|
55
|
+
|
|
56
|
+
if (err) {
|
|
57
|
+
return completionFn(config, err);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
var httpServerPort = -1;
|
|
61
|
+
// if (app) {
|
|
62
|
+
// httpServerPort = app.get("port");
|
|
63
|
+
// }
|
|
64
|
+
if (httpServerPort === -1) {
|
|
65
|
+
httpServerPort = process.env.PORT;
|
|
66
|
+
}
|
|
67
|
+
if (httpServerPort === -1) {
|
|
68
|
+
httpServerPort = 3000;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
httpServer.listen(httpServerPort);
|
|
72
|
+
|
|
73
|
+
reportFn(config);
|
|
74
|
+
completionFn(config);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
else
|
|
78
|
+
{
|
|
79
|
+
if (cluster.isMaster)
|
|
80
|
+
{
|
|
81
|
+
return launchMaster(launcher, config, options, function(err, workers) {
|
|
82
|
+
|
|
83
|
+
if (err) {
|
|
84
|
+
return completionFn(config, err);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
//reportFn(config);
|
|
88
|
+
completionFn(config);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
else
|
|
92
|
+
{
|
|
93
|
+
return launchWorker(launcher, config, options, function(err) {
|
|
94
|
+
completionFn(config, err);
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
var launchMaster = function(launcher, config, options, done)
|
|
101
|
+
{
|
|
102
|
+
var createHttpServer = options.createHttpServer;
|
|
103
|
+
|
|
104
|
+
createHttpServer(null, function(err, httpServer) {
|
|
105
|
+
|
|
106
|
+
if (err) {
|
|
107
|
+
return done(err);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
launcher.startCluster(httpServer, function(err) {
|
|
111
|
+
|
|
112
|
+
if (err) {
|
|
113
|
+
return done(err);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
var httpServerPort = -1;
|
|
117
|
+
// if (app) {
|
|
118
|
+
// httpServerPort = app.get("port");
|
|
119
|
+
// }
|
|
120
|
+
if (httpServerPort === -1) {
|
|
121
|
+
httpServerPort = process.env.PORT;
|
|
122
|
+
}
|
|
123
|
+
if (httpServerPort === -1) {
|
|
124
|
+
httpServerPort = 3000;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
httpServer.listen(httpServerPort);
|
|
128
|
+
|
|
129
|
+
launcher.afterStartCluster(httpServer, function(err, workers) {
|
|
130
|
+
done(err, workers);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
};
|
|
12
135
|
|
|
13
|
-
|
|
136
|
+
var launchWorker = function(launcher, config, options, done)
|
|
137
|
+
{
|
|
138
|
+
var startServer = options.startServer;
|
|
139
|
+
|
|
140
|
+
var configureServer = options.configureServer;
|
|
141
|
+
if (!configureServer) {
|
|
142
|
+
options.configureServer = configureServer = function(config, app, httpServer, done) {
|
|
143
|
+
done();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
startServer(config, function(err, app, httpServer) {
|
|
148
|
+
|
|
149
|
+
if (err) {
|
|
150
|
+
return done(err);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
launcher.afterStartServer(app, httpServer, function(err) {
|
|
154
|
+
|
|
155
|
+
if (err) {
|
|
156
|
+
return done(err);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
configureServer(config, app, httpServer, function(err) {
|
|
160
|
+
|
|
161
|
+
if (err) {
|
|
162
|
+
return done(err);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// if we are on a worker process, then inform the master that we completed
|
|
166
|
+
if (process.send) {
|
|
167
|
+
process.send("worker-startup");
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (process.env["CLUSTER_REPORT"])
|
|
171
|
+
{
|
|
172
|
+
var reportFn = options.report;
|
|
173
|
+
reportFn(config);
|
|
174
|
+
}
|
|
14
175
|
|
|
15
|
-
|
|
16
|
-
|
|
176
|
+
done(null, app, httpServer);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
});
|
|
17
180
|
};
|
|
@@ -1,121 +1,117 @@
|
|
|
1
|
-
var cluster = require("cluster");
|
|
2
|
-
var async = require("async");
|
|
3
|
-
|
|
4
1
|
var clusterlock = require("../../temp/clusterlock");
|
|
5
2
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
{
|
|
10
|
-
|
|
11
|
-
var cpuCount = require("os").cpus().length;
|
|
3
|
+
const cluster = require("cluster");
|
|
4
|
+
const { Server } = require("socket.io");
|
|
5
|
+
const numCPUs = require("os").cpus().length;
|
|
6
|
+
const { setupMaster, setupWorker } = require("@socket.io/sticky");
|
|
7
|
+
const { createAdapter, setupPrimary } = require("@socket.io/cluster-adapter");
|
|
12
8
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (!reportCallback) {
|
|
16
|
-
reportCallback = function() { };
|
|
17
|
-
}
|
|
18
|
-
var completionCallback = options.complete;
|
|
19
|
-
if (!completionCallback) {
|
|
20
|
-
completionCallback = function() { };
|
|
21
|
-
}
|
|
9
|
+
// numCPUs = 1;
|
|
10
|
+
// console.log("FORCE ONE CPU");
|
|
22
11
|
|
|
23
|
-
|
|
12
|
+
module.exports = function(config) {
|
|
13
|
+
|
|
14
|
+
var r = {};
|
|
15
|
+
|
|
16
|
+
r.startCluster = function(httpServer, callback)
|
|
24
17
|
{
|
|
25
|
-
//
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
{
|
|
30
|
-
var fn = function (i, workers) {
|
|
31
|
-
return function (done) {
|
|
32
|
-
|
|
33
|
-
var spawn = function (i, afterSpawnFn) {
|
|
34
|
-
|
|
35
|
-
if (!afterSpawnFn) {
|
|
36
|
-
afterSpawnFn = function () { };
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
workers[i] = cluster.fork();
|
|
40
|
-
|
|
41
|
-
workers[i].on('exit', function (worker, workers, i) {
|
|
42
|
-
return function() {
|
|
43
|
-
console.error("launchpad: worker " + i + " exited");
|
|
44
|
-
worker.exited = true;
|
|
45
|
-
|
|
46
|
-
// are all workers exited?
|
|
47
|
-
var all = true;
|
|
48
|
-
for (var z = 0; z < workers.length; z++)
|
|
49
|
-
{
|
|
50
|
-
if (!workers[z].exited) {
|
|
51
|
-
all = false;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (all)
|
|
56
|
-
{
|
|
57
|
-
console.log("launchpad: all workers exited, terminating process");
|
|
58
|
-
return process.exit(-1);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// set a timeout to otherwise restart worker in 5 seconds
|
|
62
|
-
setTimeout(function() {
|
|
63
|
-
console.log("launchpad: restarting worker: " + i);
|
|
64
|
-
spawn(i);
|
|
65
|
-
worker.exited = false;
|
|
66
|
-
}, 5000);
|
|
67
|
-
}
|
|
68
|
-
}(workers[i], workers, i));
|
|
69
|
-
|
|
70
|
-
workers[i].on('message', function (msg, c) {
|
|
71
|
-
|
|
72
|
-
if (msg === "server-startup")
|
|
73
|
-
{
|
|
74
|
-
afterSpawnFn();
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
};
|
|
78
|
-
spawn(i, function () {
|
|
79
|
-
done();
|
|
80
|
-
});
|
|
81
|
-
};
|
|
82
|
-
}(i, workers);
|
|
83
|
-
fns.push(fn);
|
|
84
|
-
}
|
|
18
|
+
// setup sticky sessions
|
|
19
|
+
setupMaster(httpServer, {
|
|
20
|
+
loadBalancingMethod: "least-connection"
|
|
21
|
+
});
|
|
85
22
|
|
|
86
|
-
|
|
23
|
+
// setup connections between the workers
|
|
24
|
+
setupPrimary();
|
|
87
25
|
|
|
88
|
-
|
|
89
|
-
|
|
26
|
+
// needed for packets containing buffers
|
|
27
|
+
cluster.setupPrimary({
|
|
28
|
+
serialization: "advanced"
|
|
29
|
+
});
|
|
90
30
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
31
|
+
return callback();
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
r.afterStartCluster = function(httpServer, callback)
|
|
35
|
+
{
|
|
36
|
+
// start up cluster locks
|
|
37
|
+
clusterlock.setup();
|
|
38
|
+
|
|
39
|
+
var startupCount = 0;
|
|
40
|
+
|
|
41
|
+
var workers = [];
|
|
42
|
+
for (let i = 0; i < numCPUs; i++)
|
|
43
|
+
{
|
|
44
|
+
var workerEnv = {};
|
|
45
|
+
if (i === 0) {
|
|
46
|
+
workerEnv["CLUSTER_REPORT"] = true;
|
|
95
47
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
48
|
+
|
|
49
|
+
var worker = cluster.fork(workerEnv);
|
|
50
|
+
|
|
51
|
+
worker.on('message', function (msg, c) {
|
|
52
|
+
//console.log("Worker message: " + msg + ", c: " + c);
|
|
53
|
+
if (msg === "worker-startup") {
|
|
54
|
+
startupCount++;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
worker.on('error', function(err) {
|
|
59
|
+
console.log("Worker.on(error) - " + JSON.stringify(err));
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
workers.push(worker);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
cluster.on("error", function(err) {
|
|
66
|
+
console.log("Cluster.on(error) - " + JSON.stringify(err));
|
|
100
67
|
});
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
68
|
+
|
|
69
|
+
cluster.on("exit", (worker) => {
|
|
70
|
+
console.log(`Worker ${worker.process.pid} died`);
|
|
71
|
+
cluster.fork();
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// wait for workers to start
|
|
75
|
+
var waitFn = function() {
|
|
76
|
+
setTimeout(function() {
|
|
77
|
+
if (startupCount >= numCPUs) {
|
|
78
|
+
return callback(null, workers);
|
|
79
|
+
}
|
|
80
|
+
else
|
|
114
81
|
{
|
|
115
|
-
|
|
82
|
+
waitFn();
|
|
116
83
|
}
|
|
117
|
-
|
|
84
|
+
}, 25);
|
|
85
|
+
};
|
|
86
|
+
waitFn();
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
r.afterStartServer = function(app, httpServer, callback)
|
|
90
|
+
{
|
|
91
|
+
// worker
|
|
92
|
+
|
|
93
|
+
const io = new Server(httpServer);
|
|
94
|
+
httpServer.io = io;
|
|
95
|
+
|
|
96
|
+
// use the cluster adapter
|
|
97
|
+
io.adapter(createAdapter());
|
|
98
|
+
|
|
99
|
+
// setup connection with the primary process
|
|
100
|
+
setupWorker(io);
|
|
101
|
+
|
|
102
|
+
// on connect
|
|
103
|
+
io.on("connection", (socket) => {
|
|
104
|
+
// TODO
|
|
105
|
+
|
|
106
|
+
// always catch err
|
|
107
|
+
socket.on("error", function(err) {
|
|
108
|
+
console.log("Caught socket error");
|
|
109
|
+
console.log(err.stack);
|
|
118
110
|
});
|
|
119
111
|
});
|
|
120
|
-
|
|
121
|
-
|
|
112
|
+
|
|
113
|
+
return callback();
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
return r;
|
|
117
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
const { Server } = require("socket.io");
|
|
2
|
+
const { setupWorker } = require("@socket.io/sticky");
|
|
3
|
+
const { createAdapter } = require("@socket.io/redis-adapter");
|
|
4
|
+
const redisHelper = require("../../util/redis");
|
|
5
|
+
|
|
6
|
+
const clusterLauncherFactory = require("./cluster");
|
|
7
|
+
|
|
8
|
+
module.exports = function(config) {
|
|
9
|
+
|
|
10
|
+
var clusterLauncher = clusterLauncherFactory(config);
|
|
11
|
+
|
|
12
|
+
var r = {};
|
|
13
|
+
|
|
14
|
+
r.startCluster = function(httpServer, callback)
|
|
15
|
+
{
|
|
16
|
+
clusterLauncher.startCluster(httpServer, callback);
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
r.afterStartCluster = function(httpServer, callback)
|
|
20
|
+
{
|
|
21
|
+
clusterLauncher.afterStartCluster(httpServer, callback);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
r.afterStartServer = function(app, httpServer, callback)
|
|
25
|
+
{
|
|
26
|
+
(async function(app, httpServer, callback) {
|
|
27
|
+
var redisOptions = redisHelper.redisOptions({}, "CLOUDCMS_CLUSTER");
|
|
28
|
+
await redisHelper.createAndConnect(redisOptions, function(err, _client) {
|
|
29
|
+
|
|
30
|
+
const pubClient = _client;
|
|
31
|
+
const subClient = pubClient.duplicate();
|
|
32
|
+
|
|
33
|
+
pubClient.on("error", function(err) {
|
|
34
|
+
// something went wrong
|
|
35
|
+
console.log("Pub Client caught error: ", err);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
subClient.on("error", function(err) {
|
|
39
|
+
// something went wrong
|
|
40
|
+
console.log("Sub Client caught error: ", err);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
const io = new Server(httpServer);
|
|
44
|
+
httpServer.io = io;
|
|
45
|
+
|
|
46
|
+
io.engine.on("connection_error", function(err) {
|
|
47
|
+
// console.log("CONNECTION ERROR");
|
|
48
|
+
// console.log("REQUEST: " + err.req); // the request object
|
|
49
|
+
// console.log("CODE: " + err.code); // the error code, for example 1
|
|
50
|
+
// console.log("MESSAGE: " + err.message); // the error message, for example "Session ID unknown"
|
|
51
|
+
// console.log("CONTEXT: " + err.context); // some additional error context
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// use the redis adapter
|
|
55
|
+
io.adapter(createAdapter(pubClient, subClient, {
|
|
56
|
+
//publishOnSpecificResponseChannel: true
|
|
57
|
+
}));
|
|
58
|
+
|
|
59
|
+
// setup connection with the primary process
|
|
60
|
+
setupWorker(io);
|
|
61
|
+
|
|
62
|
+
// on connect
|
|
63
|
+
io.on("connection", (socket) => {
|
|
64
|
+
//console.log("Redis Launcher on('connection') - socket id:" + socket.id);
|
|
65
|
+
// socket.on('message', function(m) {
|
|
66
|
+
// console.log("Socket Connection message: " + m);
|
|
67
|
+
// });
|
|
68
|
+
//
|
|
69
|
+
// // always catch err
|
|
70
|
+
// socket.on("error", function(err) {
|
|
71
|
+
// console.log("Caught socket error");
|
|
72
|
+
// console.log(err.stack);
|
|
73
|
+
// });
|
|
74
|
+
|
|
75
|
+
// TODO
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
return callback();
|
|
79
|
+
});
|
|
80
|
+
})(app, httpServer, callback);
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
return r;
|
|
84
|
+
}
|
|
@@ -1,23 +1,37 @@
|
|
|
1
|
-
|
|
1
|
+
const { Server } = require("socket.io");
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
3
|
+
module.exports = function(config) {
|
|
4
|
+
|
|
5
|
+
var r = {};
|
|
6
|
+
|
|
7
|
+
r.startCluster = function(httpServer, callback)
|
|
8
|
+
{
|
|
9
|
+
callback();
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
r.afterStartCluster = function(httpServer, callback)
|
|
13
|
+
{
|
|
14
|
+
callback();
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
r.afterStartServer = function(app, httpServer, callback)
|
|
18
|
+
{
|
|
19
|
+
var io = new Server(httpServer);
|
|
20
|
+
|
|
21
|
+
io.on("connection", (socket) => {
|
|
22
|
+
// TODO
|
|
23
|
+
|
|
24
|
+
// always catch err
|
|
25
|
+
socket.on("error", function(err) {
|
|
26
|
+
console.log("Caught socket error");
|
|
27
|
+
console.log(err.stack);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
httpServer.io = io;
|
|
32
|
+
|
|
33
|
+
callback();
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
return r;
|
|
37
|
+
}
|
package/locks/locks.js
CHANGED
|
@@ -34,7 +34,8 @@ exports = module.exports = function()
|
|
|
34
34
|
var self = this;
|
|
35
35
|
|
|
36
36
|
// set up defaults
|
|
37
|
-
if (!process.env.CLOUDCMS_LOCKS_TYPE)
|
|
37
|
+
if (!process.env.CLOUDCMS_LOCKS_TYPE)
|
|
38
|
+
{
|
|
38
39
|
process.env.CLOUDCMS_LOCKS_TYPE = "memory";
|
|
39
40
|
|
|
40
41
|
if (process.configuration.setup !== "single") {
|
|
@@ -71,8 +72,8 @@ exports = module.exports = function()
|
|
|
71
72
|
*/
|
|
72
73
|
var lock = r.lock = function(key, fn)
|
|
73
74
|
{
|
|
74
|
-
provider.lock(key, function(releaseFn) {
|
|
75
|
-
fn(function(afterReleaseCallback) {
|
|
75
|
+
provider.lock(key, function(err, releaseFn) {
|
|
76
|
+
fn(err, function(afterReleaseCallback) {
|
|
76
77
|
|
|
77
78
|
releaseFn();
|
|
78
79
|
|