日期: 2021/12/14 天气:晴
'use strict';const cluster = require('cluster');const app = require('../app');const debug = require('debug')('pay-api:server');const http = require('http');// 可用CPU数量const workers = require('os').cpus().length;let server;const Application = {start: function () {if (cluster.isMaster) {// 启动集群for (let i = 0; i < workers; i++) {cluster.fork();}cluster.on('listening', function (worker, address) {console.log(`listening: worker ${worker.process.pid} ${address.port}`);});cluster.on('exit', function (worker, code, signal) {console.log('worker %s died, restarting...', worker.process.pid);cluster.fork();});} else {// 启动线程// 设置端口let port = normalizePort(process.env.PORT || '3000');app.set('port', port);// 创建服务器server = http.createServer(app);// 监听端口server.listen(port);server.on('error', onError);server.on('listening', onListening);}}};/*** 序列化端口号*/function normalizePort (val) {let port = parseInt(val, 10);if (isNaN(port)) {// named pipereturn val;}if (port >= 0) {// port numberreturn port;}return false;}/*** 错误处理*/function onError (error) {if (error.syscall !== 'listen') {throw error;}let bind = typeof port === 'string'? 'Pipe ' + port: 'Port ' + port;// handle specific listen errors with friendly messagesswitch (error.code) {case 'EACCES':console.error(bind + ' requires elevated privileges');process.exit(1);break;case 'EADDRINUSE':console.error(bind + ' is already in use');process.exit(1);break;default:throw error;}}/*** 监听服务*/function onListening () {let addr = server.address();let bind = typeof addr === 'string'? 'pipe ' + addr: 'port ' + addr.port;debug('Listening on ' + bind);}Application.start();
