# 1javascript
今晚看到好几篇文章把golang,Node.js还有Nginx-lua拿来讲事,Node.js如今天然比较熟悉,golang则有过一些了解,而Nginx-lua则少有听到。php
有好事者对Node.js和Nginx-lua作了些benchmark的工做,彷佛nginx-lua的性能不错,在CPU和内存上更胜一筹。css
http://bluehua.org/demo/php.node.lua.htmlhtml
# tenenginejava
http://tengine.taobao.org/node
https://github.com/alibaba/tenginenginx
tengine是taobao的nginx修改版,能够被看做一个更好的Nginx,或者是Nginx的超集。git
感受他们的ngx_http_concat_module这个模块有些意思,它能够将对css、javascript的请求结果拼接起来,从而减小下载时间。github
# Node.js 监测文件改动
在调试的时候,常常须要从新启动 node.js 以便修改过的文件生效,原来第三方的 cluster 有一个配置项,能够很方便的配置监测时间间隔,文件改动后自动从新启动 worker,可是原生的 cluster 就没有这个功能了,须要本身来实现。
fs 模块提供了 watch 函数,能够方便的监测文件修改,使用这个就能够来实现文件修改后自动重启 woker 功能了。
//------------------------------------------------------------------
if (cluster.isMaster) {
process.title = appName + ' master';
console.log(process.title, 'started');
var workers = [];
// 根据 CPU 个数来启动相应数量的 worker
for (var i = 0; i < numCPUs; i++) {
var worker = cluster.fork();
workers.push(worker.pid);
}
process.on('SIGHUP', function() {
// master 进程忽略 SIGHUP 信号
});
// 监测文件改动,若是有修改,就将全部的 worker kill 掉
fs.watch(__dirname, function(event, filename) {
workers.forEach(function(pid) {
process.kill(pid);
});
});
cluster.on('death', function(worker) {
var index = workers.indexOf(worker.pid);
if (index != -1) {
workers.splice(index, 1);
}
console.log(appName, 'worker', '#' + worker.pid, 'died');
worker = cluster.fork();
workers.push(worker.pid);
});
}golang
//--------------------------------------------------------