[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

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

相关文章
相关标签/搜索