mirror of
https://github.com/ONLYOFFICE/server.git
synced 2026-04-07 14:04:35 +08:00
Добавил запуск процесса для сервера. Теперь если он упадет, то будет писаться log и поднимется новый поток.
git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/nodeJSProjects@62120 954022d7-b5bf-4e40-9824-e11837661b57
This commit is contained in:
@ -1,51 +1,75 @@
|
||||
var cluster = require('cluster');
|
||||
var config = require('./config.json');
|
||||
process.env.NODE_ENV = config['server']['mode'];
|
||||
|
||||
var logger = require('./../../Common/sources/logger'),
|
||||
express = require('express'),
|
||||
http = require('http'),
|
||||
https = require('https'),
|
||||
fs = require("fs"),
|
||||
docsCoServer = require('./DocsCoServer'),
|
||||
app = express(),
|
||||
server = null;
|
||||
var logger = require('./../../Common/sources/logger');
|
||||
|
||||
logger.warn('Express server starting...');
|
||||
var workersCount = 1; // ToDo Пока только 1 процесс будем задействовать. Но в будующем стоит рассмотреть несколько.
|
||||
if (cluster.isMaster) {
|
||||
logger.warn('start cluster with %s workers', workersCount);
|
||||
for (var nIndexWorker = 0; nIndexWorker < workersCount; ++nIndexWorker) {
|
||||
var worker = cluster.fork().process;
|
||||
logger.warn('worker %s started.', worker.pid);
|
||||
}
|
||||
|
||||
if (config['ssl']) {
|
||||
var privateKey = fs.readFileSync(config['ssl']['key']).toString(),
|
||||
certificateKey = fs.readFileSync(config['ssl']['cert']).toString(),
|
||||
trustedCertificate = fs.readFileSync(config['ssl']['ca']).toString(),
|
||||
//See detailed options format here: http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener
|
||||
options = {key: privateKey, cert: certificateKey, ca: [trustedCertificate]};
|
||||
|
||||
server = https.createServer(options, app);
|
||||
cluster.on('exit', function(worker) {
|
||||
logger.warn('worker %s died. restart...', worker.process.pid);
|
||||
cluster.fork();
|
||||
});
|
||||
} else {
|
||||
server = http.createServer(app);
|
||||
var express = require('express'),
|
||||
http = require('http'),
|
||||
https = require('https'),
|
||||
fs = require("fs"),
|
||||
docsCoServer = require('./DocsCoServer'),
|
||||
app = express(),
|
||||
server = null;
|
||||
|
||||
logger.warn('Express server starting...');
|
||||
|
||||
var configSSL = config['ssl'];
|
||||
if (configSSL) {
|
||||
var privateKey = fs.readFileSync(configSSL['key']).toString(),
|
||||
certificateKey = fs.readFileSync(configSSL['cert']).toString(),
|
||||
trustedCertificate = fs.readFileSync(configSSL['ca']).toString(),
|
||||
//See detailed options format here: http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener
|
||||
options = {key: privateKey, cert: certificateKey, ca: [trustedCertificate]};
|
||||
|
||||
server = https.createServer(options, app);
|
||||
} else {
|
||||
server = http.createServer(app);
|
||||
}
|
||||
|
||||
// Если захочется использовать 'development' и 'production',
|
||||
// то с помощью app.settings.env (https://github.com/strongloop/express/issues/936)
|
||||
// Если нужна обработка ошибок, то теперь она такая https://github.com/expressjs/errorhandler
|
||||
docsCoServer.install(server, function() {
|
||||
server.listen(config['server']['port'], function() {
|
||||
logger.warn("Express server listening on port %d in %s mode", config['server']['port'], app.settings.env);
|
||||
});
|
||||
|
||||
app.get('/index.html', function(req, res) {
|
||||
res.send('Server is functioning normally. Version: ' + docsCoServer.version);
|
||||
});
|
||||
|
||||
app.get('/CommandService.ashx', onServiceCall);
|
||||
app.post('/CommandService.ashx', onServiceCall);
|
||||
|
||||
function onServiceCall (req, res) {
|
||||
var result = docsCoServer.commandFromServer(req.query);
|
||||
result = JSON.stringify({'key': req.query.key, 'error': result});
|
||||
|
||||
res.setHeader('Content-Type', 'application/json');
|
||||
res.setHeader('Content-Length', result.length);
|
||||
res.send(result);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Если захочется использовать 'development' и 'production',
|
||||
// то с помощью app.settings.env (https://github.com/strongloop/express/issues/936)
|
||||
// Если нужна обработка ошибок, то теперь она такая https://github.com/expressjs/errorhandler
|
||||
|
||||
docsCoServer.install(server, function() {
|
||||
server.listen(config['server']['port'], function() {
|
||||
logger.warn("Express server listening on port %d in %s mode", config['server']['port'], app.settings.env);
|
||||
process.on('uncaughtException', function (err) {
|
||||
logger.error((new Date).toUTCString() + ' uncaughtException:', err.message);
|
||||
logger.error(err.stack);
|
||||
logger.shutdown(function () {
|
||||
process.exit(1);
|
||||
});
|
||||
|
||||
app.get('/index.html', function(req, res) {
|
||||
res.send('Server is functioning normally. Version: ' + docsCoServer.version);
|
||||
});
|
||||
|
||||
app.get('/CommandService.ashx', onServiceCall);
|
||||
app.post('/CommandService.ashx', onServiceCall);
|
||||
|
||||
function onServiceCall (req, res) {
|
||||
var result = docsCoServer.commandFromServer(req.query);
|
||||
result = JSON.stringify({'key': req.query.key, 'error': result});
|
||||
|
||||
res.setHeader('Content-Type', 'application/json');
|
||||
res.setHeader('Content-Length', result.length);
|
||||
res.send(result);
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user