[Idea Fragments]2013.08.08

# 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

//--------------------------------------------------------

相關文章
相關標籤/搜索