2016-03-22 40 views
2

シェルスクリプトを実行するためのGETリクエストを開始するejsページがあります。node.jsによる遅延応答による接続タイムアウト

とノードjsがスクリプトが正常に実行され、Node.jsのコンソールに出力を印刷しますシェルスクリプトの出力

res.render{ 
    output: shell_script_output 
} 

でスクリプトを実行した後のページに応答します。

スクリプトは5分以上実行されるため、ブラウザで2分後に接続タイムアウトエラーが発生します。

これには最適な解決策がありますか?スクリプトが実行されるまでejsページを待機させるには?

ありがとうございました。

+0

シンプルなクイックソリューションとしてリクエストのタイムアウトを増やすことができます –

+0

どうすればいいですか? –

+1

ちょうどそれgoogle? –

答えて

1

スクリプトを実行する代わりに、要求の詳細をジョブキュー(データベーステーブルでもよいし、複雑にしたい場合はZeroMQなど)に入れてすぐに戻ることもできます応答で)。

ジョブがあるときに別のプロセスでキューを監視し、シェルスクリプトを起動させます。スクリプトが終了したら、結果を応答キューに入れます。

一方、クライアントでは、ジョブIDの要求とと​​もにサーバーを定期的に(30秒ごとに)ポーリングします。サーバーが応答キューをチェックして、そのジョブのデータが存在するかどうかを確認し、「ここにある」、「まだ準備ができていません」、または「15分後に、おそらく何かが間違っている」と応答します。

+0

Rabbit mq(redis bus、sqs queueなど)経由で双方向通信を確立し、待機側からポーリングを取り除くのはなぜですか?特定のジョブIDを検索してクライアント側からのポーリングはスケーラビリティとリソースの最適化という点で良い解決策ではないようです – Yerken

関連する問題