i5ting / wechat-dev-with-nodejs

StuQ《Node.js微信开发》课程文档
https://i5ting.github.io/wechat-dev-with-nodejs/
286 stars 86 forks source link

http.request() 过多造成OOM,加入rabbitmq #22

Closed sunyonggang closed 8 years ago

sunyonggang commented 8 years ago

上次答疑说过:

    for(i <- [1, 100w]) {
        var req = http.request(options, callback);
        req.end();
    }

可以加入rabbitmq,这两天我也看了下这个东西,主要集中在Work Queues,我的想法是生成一定数量的http.ClientRequest 实例,然后将它们sendToQueue。

  1. 我看了一下例子,基本上传输的message都是String类型的,能支持对象么,我能传输一个req么?
  2. sendToQueue的时候,好像也没有参数可以指定多少条进入到queue中去?
  3. 上面req的这段代码中,callback是要处理response,假如这边我要怎么处理callback函数,简单滴说,callback函数的定义应该在sendToQueue这边么?而不是consume这边?👮🏻
sunyonggang commented 8 years ago

可以忽略上面的1,3. 我现在使用的是 Hello World 先启动consume(),然后向queue中传输数据

    for (i <- [1, 100w]) {
        ch.sendToQueue(queue, new buffer(i + message));
    }
  1. 我看到的是sendToQueue这边完成之后,consume才开始输出,不是应该一边生产一边输出么?还是我理解错了?
  2. 如上面的例子,将[1, 100w]全部导入,我打算在consume端构造http.request()请求,但这中间rabbmitmq好像也没有有效的参数指定queue中一次保存多少,或者取出多少数据?
sunyonggang commented 8 years ago

这边后来没有用rabbitmq,考虑了generic-pool之类的,还是有点问题。后面参考这里 node-js-process-out-of-memory-in-http-request-loop