# 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
//--------------------------------------------------------