2016-10-04 161 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