From c3b24da54e4d80b310ba3f405ef26bc385698f40 Mon Sep 17 00:00:00 2001 From: "Alexander.Trofimov" Date: Thu, 16 Apr 2015 11:19:52 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=20=D0=BF=D1=80=D0=BE=D1=86?= =?UTF-8?q?=D0=B5=D1=81=D1=81=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B5=D1=80=D0=B0.=20=D0=A2=D0=B5=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D1=8C=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=BE=D0=BD=20=D1=83?= =?UTF-8?q?=D0=BF=D0=B0=D0=B4=D0=B5=D1=82,=20=D1=82=D0=BE=20=D0=B1=D1=83?= =?UTF-8?q?=D0=B4=D0=B5=D1=82=20=D0=BF=D0=B8=D1=81=D0=B0=D1=82=D1=8C=D1=81?= =?UTF-8?q?=D1=8F=20log=20=D0=B8=20=D0=BF=D0=BE=D0=B4=D0=BD=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D1=82=D1=81=D1=8F=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=82=D0=BE=D0=BA.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/nodeJSProjects@62120 954022d7-b5bf-4e40-9824-e11837661b57 --- CoAuthoring/sources/server.js | 108 +++++++++++++++++++++------------- 1 file changed, 66 insertions(+), 42 deletions(-) diff --git a/CoAuthoring/sources/server.js b/CoAuthoring/sources/server.js index ef328779..28cabd6a 100644 --- a/CoAuthoring/sources/server.js +++ b/CoAuthoring/sources/server.js @@ -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); - } -}); +}); \ No newline at end of file