简体   繁体   English

AWS Lambda Socket上的Node.js Http发布请求挂断

[英]Node.js Http post request on aws lambda Socket Hang up

var http = require('http');
exports.handler = function(event, context) {

  var headers = {
      'content-type': 'application/x-www-form-urlencoded'
  }
  var options = {
    host: 'stage.wings.com',
    path:'/test-lambda',
    form: {
     'days':'3'
    },
    headers:headers
  };
  console.log(options);

  var req = http.request(options, function(response) {
      // Continuously update stream with data
      var body = '';
      response.on('data', function(d) {
          body += d;
      });
      response.on('end', function() {
          // Data reception is done, do whatever with it!
          var parsed = JSON.parse(body);
          console.log("success");
          console.log(parsed);
      });
  });
  // Handler for HTTP request errors.
  req.on('error', function (e) {
      console.error('HTTP error: ' + e.message);
      completedCallback('API request completed with error(s).');
  });
};

my node version : v0.10.25 If i execute on file it gives HTTP error: socket hang up From aws lambda if i run this function it throws error 我的节点版本:v0.10.25如果我在文件上执行它会给出HTTP错误:如果我运行此函数,套接字会从aws lambda挂起,它将引发错误

Lambda error:2016-10-09T23:11:17.200Z 89f2146f-8e75-11e6-9219-b9b32aa0a768 Error: socket hang up at createHangUpError (_http_client.js:200:15) at Socket.socketOnEnd (_http_client.js:285:23) at emitNone (events.js:72:20) at Socket.emit (events.js:166:7) at endReadableNT (_stream_readable.js:905:12) at nextTickCallbackWith2Args (node.js:437:9) at process._tickDomainCallback (node.js:392:17) Lambda错误:2016-10-09T23:11:17.200Z 89f2146f-8e75-11e6-9219-b9b32aa0a768错误:套接字在Socket.socketOnEnd(_http_client.js:285:23)处的createHangUpError(_http_client.js:200:15)挂断)在进程处的nextTickCallbackWith2Args(node.js:437:9)的endReadableNT(_stream_read.js:905:12)的Socket.emit(events.js:166:7)的emitNone(events.js:72:20)处。 _tickDomainCallback(node.js:392:17)

There is a timeout time for aws-lambda, it will hang up after at most 300 seconds. aws-lambda有超时时间,最多300秒后会挂断。

Here is little more about it. 这里有更多关于它的内容。 http://docs.aws.amazon.com/lambda/latest/dg/limits.html http://docs.aws.amazon.com/lambda/latest/dg/limits.html

you can use context.getRemainingTimeInMillis(); 您可以使用context.getRemainingTimeInMillis(); which will return you remaining time of your lambda so you can flush your data. 这将返回您剩余的lambda时间,以便您刷新数据。 If this is intended to be run longer than five minutes, then you can implement some kind of grace-full shutdown and flush your data before that. 如果打算将其运行超过五分钟,则可以实施某种宽限期关机并在此之前刷新数据。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM