关于《深入浅出node.js》中的一个解决雪崩的代码补全

在一篇关于node.js事件机制的专题中,提到了解决访问雪崩的问题,链接如下:
http://www.infoq.com/cn/articles/tyq-nodejs-event,作者为淘宝的朴灵,原名田永强

其中提到了通过将请求的回调函数压入事件队列中来解决雪崩的办法,核心代码如下:

var proxy = new EventProxy();
var status = "ready";
var select = function (callback) {
    proxy.once("selected", callback);
    if (status === "ready") {
        status = "pending";
        db.select("SQL", function (results) {
            proxy.emit("selected", results);
            status = "ready";
        });
    }
};

由于没找到完整代码,我便创建了一个http server来验证,验证结果确实是db查询的次数大大减少,补全后的核心代码如下:

var _db,
    status = 'ready',
    event = new emitter();

event.setMaxListeners(0);
mongodb.open(function(err, db) {
    _db = db;
});

http.createServer(function(request, response) {
    event.once('got', function(result) {
        response.writeHead(200);
        response.end(result.name);
    });

    if (status == 'ready') {
        status = "pendding";
        _db.collection('users', function(err, collection) {
            collection.findOne({name: 'leo'}, function(err, doc) {
                doc && event.emit('got', doc);
                status = "ready";
            });
        });
    }
}).listen(9090);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值