-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathserver.js
125 lines (87 loc) · 2.94 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
'use strict';
var dotenv = require('dotenv');
dotenv.load();
var ENVIRONMENT = process.env.NODE_ENV || 'development';
var cluster = require('cluster');
var numCPUs = require('os').cpus().length,
clusterStartTime = Date.now(),
newWorkerEnv = {};
if (cluster.isMaster) {
// **************************************
// *** Master spawns worker processes ***
// **************************************
newWorkerEnv.clusterStartTime = clusterStartTime;
for (var i = 0; i < numCPUs; i++) {
console.log('Starting worker ' + i);
cluster.fork(newWorkerEnv);
}
cluster.on('exit', function(worker, code, signal) {
console.log('worker ' + worker.process.pid + ' died');
cluster.fork(newWorkerEnv);
});
cluster.on('online', function(worker) {
console.log('Worker ' + worker.process.pid + ' online');
});
} else {
// **********************
// *** Worker process ***
// **********************
if (process.env.clusterStartTime) {
var time = parseInt(process.env.clusterStartTime, 10);
process.clusterStartTime = new Date(time);
}
var REDIS_URL = process.env.REDIS_URL,
SECRET = process.env.SECRET_KEY,
app = require('express')(),
http = require('http'),
server = http.createServer(app),
io = require('socket.io').listen(server),
socketioJwt = require('socketio-jwt'),
RoomAuth = require('./app/RoomAuth');
var redisClient = require('./app/RedisClient'),
redis = new redisClient(REDIS_URL),
redisStoreClient = redis.createStoreClient(),
RedisStore = require('socket.io/lib/stores/redis');
if (ENVIRONMENT === 'development') {
/* Serve html page with express */
app.get('/', function(req, res) {
res.sendfile(__dirname + '/views/index.html');
});
/* Serve html page with express */
app.get('/2', function(req, res) {
res.sendfile(__dirname + '/views/index2.html');
});
}
/* Socket.io config for auth */
io.configure(function() {
/* basic config */
io.set('log level', 1);
io.enable('browser client minification');
io.enable('browser client etag');
io.enable('browser client gzip');
io.set('transports', ['websocket', 'xhr-polling', 'jsonp-polling']);
/* Redis store config */
io.set('store', new RedisStore(redisStoreClient));
/* WebSocket Auth */
io.set('authorization', socketioJwt.authorize({
secret: SECRET,
handshake: true
}));
});
/* Connection event listener */
io.sockets.on('connection', function(socket) {
console.log(socket.handshake.decoded_token.user_id, 'user_id connected');
/* Respond to subscribe message */
socket.on('subscribe', RoomAuth.authorize({
decodedToken: socket.handshake.decoded_token
}));
});
/* Start server */
var port = process.env.PORT || 3000;
server.listen(port, function() {
console.info('Listening on port ' + port);
});
process.on('SIGINT', function() {
process.exit();
});
}