2016-10-04 135 views
0

我正在使用AWS Lambda,我想知道是否有办法发出HTTP请求,但不等待响应?发出HTTP请求UDP-like

我只想ping一个远程服务,触发一个事件,但我不在乎该事件触发的逻辑是否失败。至少不是在请求源的第一个服务内。

+0

在node.js的,没有等待响应,反正它的异步。你的代码的其余部分无论如何都可以自由运行,所以只需发送你的回应并忘记它。当它最终返回时,套接字将被清除。除了发送http请求,然后完成之外,没有什么可做的了。 – jfriend00

回答

0

Here解释了使用超时。

这是例子:

const request = require('request'); 

request.get('http://some/url/here', {timeout: 100},() =>{console.log('request sent');}); 

附:请记住,在nodej中,这些操作是异步的,因此您不必等待答案。

,但如果它的明确的应用程序,你想快速响应前端或thirdparties,所以结帐这个例子:

const request = require('request'); 
const express = require('express'); 

const app = express(); 

app.get('/some/route', (req, res) => { 
    request.get('http://some/url/here',() =>{}); 
    res.status(202).send('Request accepted'); 
}); 
0

这应该让你得到你想要的。它将在请求发送后立即调用回调(或发生错误)。

function udpHttp (options, cb) { 
    return require('http') 
    .request(options) 
    .on('error', cb) 
    .end(() => cb(null)) 
} 
+0

@ jfriend00是的,这是因为使用AWS Lambda函数时,一旦您指出您的函数已完成,整个容器就会“冻结”。这意味着如果从请求中触发并立即调用lambda回调('context.succeed()'),那么在lambda容器停止执行之前,套接字甚至没有机会打开。这就是为什么您仍然需要此函数的回调函数,以便您可以确保在容器被冻结之前实际发送了请求。 – idbehold

+0

@ jfriend00也根本不处理响应。错误事件处理程序用于打开套接字时发生错误,并且结束回调用于知道您的请求何时通过套接字成功发送。它不会等待服务器的响应。 – idbehold