6

サーバー側でNode.jsを使用して実行される、JavaScriptを使用してデータを変換する柔軟な方法をユーザーに提供します。その設計では、考慮すべき3つの問題があります。

  • セキュリティ:ネイティブNode.jsライブラリの使用を避けるために 、サンドボックスを使用してセキュリティの問題を解決しました。

  • リソース:v8オプションを使用して最大メモリ使用量を簡単に設定できます--max_executable_size。CPU使用率については、cpulimitまたはを使用して管理する方法を説明しますreniceが、今はそれほど重要ではありません。

  • 時間:スクリプトが空腹のゾンビとして実行されないように、スクリプトの実行時間を制限する必要があります。そして、ここで私は立ち往生しています。

私は次のようなものを試しました:

 node -e '
    setTimeout(function() {
       console.log("timeout");
       process.exit;
    }, 5000);
    console.log("begin");
    while (1);
 '

しかし、このコードは「開始」のみを表示し、タイムアウトが呼び出されないようです。何か案が ?

4

3 に答える 3

8

tripwire ( https://github.com/tjanczuk/tripwire ) を参照してください。ランナウェイ ノード スクリプトを強制終了し、タイムアウトを設定できるモジュールです。これはネイティブ ノード モジュールであるため、考慮すべき点の 1 つですが、Mac、Windows、および Linux で動作します。

于 2014-06-09T21:09:30.517 に答える
6

残念ながら、ユーザーがブロック操作 ( などwhile(1)) を開始できる場合、一定時間後にノードを終了するように指示する方法はありません。ブロック操作によってsetTimeoutハンドラーの起動が妨げられるためです。ユーザーが開始したものがメインループをブロックしないようにするか、(これは非常に悪い考えです) ある種の外部自動キル/タイムアウトを使用して Node プロセスを破棄します。

基本的に、Node を使用してノンブロッキングコードの実行時間を制限できますが、Node の要点は、ブロッキング コードがすべてをブロックすることです。ユーザーが本当に任意のコードを実行できる場合は、プロセス マネージャー/タイムアウト キラーをより高いレベルで実行することを検討します

于 2013-03-02T16:38:01.520 に答える