5

を介してノード+エクスプレスアプリに大量のデータをインポートしようとしていますapp.get("/importdata" , callback)。タイムアウト時にリクエストが完了していない場合は、リクエストが再度再生され、サーバーは同じデータのインポートを再開します。

接続タイムアウト後にリクエストが再生される正確な理由を見つけることができませんか?

timeOut期間を膨大な数に設定すると、問題の一部は解決されますが、リクエストが再度再生される理由が正確にわかりません。

よろしくお願いします。

私のserver.jsからのピース

app.get('/impdata', function(req, res){
req.connection.setTimeout(600000);
console.log("impstore--------------->");
Q.when( getData(req.data), function(resp){
    res.json(resp);
}); });

私のコンソールからのピース

impstore--------------->
userid 
time stamp Wed Oct 24 2012 16:35:28 GMT+0530 (IST)
Listings got 100
userid 
ims 1
time stamp recursive
Listings got 200
userid 
ims 1
time stamp recursive
Listings got 300
userid 
ims 1
time stamp recursive
Listings got 400
userid 
ims 1
time stamp recursive
Listings got 500
userid 
ims 1
time stamp recursive
Listings got 600
userid 
ims 1
time stamp recursive
Listings got 700
userid 
ims 1
time stamp recursive
Listings got 800
userid 
ims 1
time stamp recursive
Listings got 900
userid 
ims 1
time stamp recursive
impstore--------------->
userid 
time stamp Wed Oct 24 2012 16:37:28 GMT+0530 (IST)
Listings got 1000
userid 
ims 1
time stamp recursive
Listings got 100
userid 
ims 1

詳細:100個のチャンクでデータを取得しています900個のデータリストを受け取り、サーバーがタイムアウトしましたが、コンソールでリクエストが再度行われ、最後の2セットを確認します。最初のセットは、次の100個のリストを表示します。 1000に増やし、2番目のリストはリストが100であり、プロセス全体が完了すると、Uには2つの同様のオブジェクトがあります。

うまくいけば、私はよく説明しました。

4

1 に答える 1

0

私は同じ問題を抱えています。HTTP プロトコル仕様によれば、http クライアントはタイムアウト後にリクエストを再送信できることを説明するスタック オーバーフローで別の回答を見ました。Express の場合、デフォルトのサーバー タイムアウトは 2 分です ( https://nodejs.org/api/all.html#http_server_settimeout_msecs_callback )。

ブラウザからそのエンドポイントにアクセスしている場合、これはおそらくあなたのケースです。

おかしなことはわかりますが、幽霊が同じリクエストをあなたに再送しているようです。他の人は、リクエストを再送信しているのがクライアントではないかどうかを再確認するように何度もあなたに求めます。

このゴーストの動作のより良い説明で他の回答が見つかった場合、この回答を更新します。

于 2016-08-03T05:36:52.890 に答える