使用Nodejs创建基本的网站 Microblog--《Node.js开发指南》 3
使用cluster模块
创建cluster.js,调用app.js
var cluster = require(‘cluster‘); var os = require(‘os‘); //获取CPU数量 var numCPUs = os.cpus().length; var workers = {}; if(cluster.isMaster) { //主进程分支 cluster.on(‘exit‘, function (worker) { //当一个工作进程结束时,重启工作进程 delete workers[worker.pid]; worker = cluster.fork(); workers[worker.pid] = worker; }); //初始开启与CPU数量相同的工作进程 for(var i = 0; i < numCPUs; i++) { var worker = cluster.fork(); workers[worker.pid] = worker; } } else { //工作进程分支,启动服务器 var app = require(‘./app‘); app.listen(3000); } //当主进程被终止时,关闭所有工作进程 process.on(‘SIGTERM‘, function() { for( var pid in workers) { process.kill = (pid); } process.exit(0); });
在终端运行
$node cluster.js
可以看到进程列表中启动了多个node进程(4核CPU)。
cluster.js创建与CPU核心数个数相同的服务器进程,以确保充分利用CPU资源。通过cluster启动的工作进程可以直接实现端口复用,因此所有工作进程只需监听同一个端口。
2.启动脚本
建立mynodeapp文件
#! /bin/sh NODE_ENV=production DAEMON="node /home/nick/nodejs/examples/express_example/cluster.js" NAME=MyNodeApp DESC=MyNodeApp PIDFILE="mynodeapp.pid" case "$1" in start) echo "Starting $DESC: " nohup $DAEMON > /dev/null & echo $1 > $PIDFILE echo "$NAME." ;; stop) echo "Stopping $DESC: " pid=‘cat $PIDFILE‘ kill $pid rm $PIDFILE echo "$NAME." ;; esac exit 0
$chmode +x mynodeapp
赋予执行权限,其通过nohup启动服务器,使进程不会因为退出终端而关闭,同时将主进程pid写入文件,当调用结束时,从文件读取pid,终止主进程以关闭服务器。
运行结果却不好,可以启动程序,但是无法关闭。
自动编号:
$ cd /etc/init.d $ sudo chmod 755 /etc/init.d/filename $ sudo update-rc.d filename defaults
指定编号:
$ cd /etc/init.d $ sudo chmod 755 /etc/init.d/filename $ sudo update-rc.d filename defaults N
编号必须在 0 至 99 之间。
如果要卸载启动脚本:
$ cd /etc/init.d $ sudo update-rc.d -f filename remove
本文出自 “飒飒秋风” 博客,请务必保留此出处http://xjhznick.blog.51cto.com/3608584/1537612
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。