私はAWS Lambdaを使っていますが、HTTPリクエストを行う方法があるのかどうかを知りたいのですが、レスポンスを待たずにいますか?HTTPリクエストをUDPのようにする
リモートサービスにpingしてイベントをトリガーしたいだけですが、イベントによってトリガーされたロジックが失敗したかどうかは気にしません。少なくとも、要求元からの最初のサービス内からではありません。
私はAWS Lambdaを使っていますが、HTTPリクエストを行う方法があるのかどうかを知りたいのですが、レスポンスを待たずにいますか?HTTPリクエストをUDPのようにする
リモートサービスにpingしてイベントをトリガーしたいだけですが、イベントによってトリガーされたロジックが失敗したかどうかは気にしません。少なくとも、要求元からの最初のサービス内からではありません。
Hereは、タイムアウトの使用について説明しています。
そして、これは一例です:
const request = require('request');
request.get('http://some/url/here', {timeout: 100},() =>{console.log('request sent');});
P.S. nodejでは、このような操作は非同期であるため、応答を待つ必要はありません。
が、それは明示アプリだとあなたはすぐにフロントエンドまたはthirdpartiesに応答するので、この例をチェックアウトする場合:Node.jsの中
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');
});
これはあなたが望むものを得るはずです。要求が送信されると(またはエラーが発生すると)すぐにコールバックが呼び出されます。
function udpHttp (options, cb) {
return require('http')
.request(options)
.on('error', cb)
.end(() => cb(null))
}
@ jfriend00はいAWSラムダ関数で作業する場合、関数が完了したら、コンテナ全体が "フリーズ"します。つまり、要求を放してすぐにラムダコールバック( 'context.succeed()')を呼び出すと、ラムダコンテナが実行を停止する前にソケットが開く機会が得られなくなります。このため、コンテナがフリーズする前に要求が実際に送信されたことを確認できるように、この関数のコールバックがまだ必要です。 – idbehold
@ jfriend00また、これは応答をまったく処理していません。エラーイベントハンドラは、ソケットを開く際にエラーがあった場合に使用します。エンドコールバックは、要求がソケットを介して正常に送信されたことを知ることです。サーバーからの応答を待つことはありません。 – idbehold
、応答のための待ち時間が非同期としてとにかくありません。とにかくあなたのコードの残りの部分は自由に実行できるので、あなたの応答を送って忘れてください。最終的に戻ると、ソケットがクリーンアップされます。 httpリクエストを送信してから行う以外のことは何もありません。 – jfriend00