带有保持活动报头的Node.js https.request

| 我想从用户Facebook墙中拉帖。 以下代码段有效,但永不终止:
var https = require(\'https\');

facebookWall = function(user) {
  var options = {
    host: \'graph.facebook.com\',
    port: 443,
    path: \'/me/home?access_token=\' + user.facebook_token + \'&since=\' + encodeURIComponent(user.facebook_timestamp),
    method: \'GET\',
    headers: {
      \'Connection\':\'keep-alive\'
    }
  };

  var req = https.request(options)
  .on(\'response\', function(response) {
    var body = \'\';
    response.on(\'data\', function(data) {
      body += data;
      try {
        var wallPosts = JSON.parse(body);
        console.log(\"user \" + user.id + \" has \" + wallPosts.data.length + \" new items on their wall\");
      }
      catch (e) {
        //console.log(\"waiting for more data chunks...\");
      }
    })
  });
  req.end();

  req.on(\'error\', function(e) {
    console.error(e);
  });
}
我认为这是由“ 1”标题引起的。当我将其替换为“ 2”时,当从facebook检索到所有数据时,脚本将终止。 我希望能够使用keep-alive标头来避免必须为每个请求创建新的SSL连接。我有成千上万的请求,有了keep-alive标头,它只需几秒钟即可完成,而没有keep-alive标头的几分钟则可以完成。 有谁知道如何做到这一点?我是Node.JS的新手,所以如果我遗漏了一些明显的内容,我深表歉意。     
已邀请:
        这是因为尚未为https / tls / ssl实施keep-alive 在节点4.x中,我也相信6.x。这就是为什么在节点websocket-server中 它也无法正常工作,请参见https://github.com/nephics/node-websocket-server/commit/3a732bff6aabe694834d87086a7718be7c0ce138     
        我注意到您正在使用https。取决于您使用的是哪个版本的节点,但是当前结束事件存在已知问题。 https://github.com/joyent/node/issues/728     
        您必须执行以下操作: 1)将response.on(\'end \',function(){...执行输出...});用于https.request 不要在response.on(\'data \',...);中输出数据 2)使用Connection:keep-alive时,“关闭”会导致非常差的性能问题。我已经做了很多测试,我可以确认这一点。 除此之外: 3)在您的选项中,设置代理,如果需要并发,则将agent.maxSockets设置为更大的数字。默认仅为5。 4)您应该考虑制作自己的例程来处理https.request超时。 (请转到github / joyent并搜索它。基本上使用setTimeout发出超时错误)。     

要回复问题请先登录注册