Node.js規範化応用

8970 ワード

Node.jsは単一スレッドモードで実行されますが、イベント駆動の例を使用して同時処理されます.また、パラレル処理されたマルチコアCPUシステムを十分に活用するためのサブプロセスの作成にも役立ちます.
サブプロセスには常に3つのストリームがあります.stdin,child....stderrこれは、親プロセスstdioストリームと共有される可能性があります.
Node提供child_プロセスモジュールでは、次の3つの主要な方法でサブプロセスを作成します.
exec - child_process.execメソッドはshell/コンソールでコマンドを実行し、出力をバッファします.
spawn - child_process.spawnは、与えられた命令の新しいプロセスを開始する.
fork - child_process.forkメソッドはspawn()を指定してサブプロセスを作成する特例です.

Exc()メソッド


child_process.execメソッドはshellでコマンドを実行し、出力をバッファします.次の特徴があります.
child_process.exec(command[, options], callback)

パラメータ


次に、使用するパラメータの説明を示します.
command文字列は、実行するコマンドであり、スペースで区切られたパラメータoptionsオブジェクトには、次の1つ以上のオプションが含まれます.
cwdサブプロセスの文字列現在の作業ディレクトリEnvオブジェクト環境のキー値対encoding文字列(デフォルト:UTF 8)shell文字列実行(デフォルトコマンド:UNIXで'/bin/sh'、Windowsでcmd.exe)、shellでは/s/cがWindowsまたは-cでUNIX/;Windowsではコマンドライン解析がcmd.exeと互換性があることを理解する必要があります)timeout数字(デフォルト:0)maxBuffer数字(デフォルト:200*1024)killSignal文字列(デフォルト:'SIGTERM')uid数字プロシージャを設定するためのユーザのアイデンティティgidデジタル設定プロセスのグループID
callback関数は、プロセスが終了すると、3つのパラメータエラーを取得し、出力およびエラーを次の出力と呼びます.
exec()メソッドでバッファ最大サイズを返し、プロセスの終了を待機し、すべてのキャッシュデータを一度に返してみます.


2つのJSファイル名を作成します.supportです.jsとmasterjs:
File: support.js
console.log("Child Process " + process.argv[2] + " executed." );

File: master.js
const fs = require('fs');
const child_process = require('child_process');

for(var i=0; i<3; i++) {
   var workerProcess = child_process.exec('node support.js '+i,
      function (error, stdout, stderr) {
         if (error) {
            console.log(error.stack);
            console.log('Error code: '+error.code);
            console.log('Signal received: '+error.signal);
         }
         console.log('stdout: ' + stdout);
         console.log('stderr: ' + stderr);
      });

      workerProcess.on('exit', function (code) {
      console.log('Child process exited with exit code '+code);
   });
}

マスターを実行します.jsは結果を見た:
$ node master.js

出力を確認します.サーバが起動しました
Child process exited with exit code 0
stdout: Child Process 1 executed.

stderr:
Child process exited with exit code 0
stdout: Child Process 0 executed.

stderr:
Child process exited with exit code 0
stdout: Child Process 2 executed.

spawn()メソッド


child_process.spawnメソッドは、指定されたコマンドを使用して新しいプロセスを開始します.次の特徴があります.
child_process.spawn(command[, args][, options])

パラメータ


次に、使用するパラメータの説明を示します.
command文字列実行コマンドargs文字列パラメータ配列リストoptionsオブジェクトには、次の1つ以上のオプションが含まれます.
cwdサブプロセスの文字列は、現在の作業ディレクトリである.
Envオブジェクト環境のキー値対stdio配列|サブストリングの標準入出力構成customFds配列は、ファイル記述子を使用するサブ配列を推奨せず、標準入出力としてを使用する.
detachedブールは、サブプロセスグループになります.
uid数プロセスのユーザーのアイデンティティを設定します.
gid数プロセスのグループIDを設定します.

spawn()メソッドは、処理が大量のデータを返すときに使用されるストリーム(標準出力と標準エラー)を返します.spawn()は、応答を受信したプロセスの実行を開始する.


2つのJSファイル名をsupportとして作成する.jsとmasterjs:
File: support.js
console.log("Child Process " + process.argv[2] + " executed." );

File: master.js
const fs = require('fs');
const child_process = require('child_process');
 
for(var i=0; i<3; i++) {
   var workerProcess = child_process.spawn('node', ['support.js', i]);

   workerProcess.stdout.on('data', function (data) {
      console.log('stdout: ' + data);
   });

   workerProcess.stderr.on('data', function (data) {
      console.log('stderr: ' + data);
   });

   workerProcess.on('close', function (code) {
      console.log('child process exited with code ' + code);
   });
}

マスターを実行します.jsが見た結果:
$ node master.js

出力を確認します.サーバが起動しました
stdout: Child Process 0 executed.

child process exited with code 0
stdout: Child Process 1 executed.

stdout: Child Process 2 executed.

child process exited with code 0
child process exited with code 0

forkメソッド


child_process.forkメソッドはspawn()がノードを作成するプロセスの特例である.次の署名があります.
child_process.fork(modulePath[, args][, options])

パラメータ


次に、使用するパラメータの説明を示します.
modulePath文字列-サブプロセスを実行するモジュール
args文字列-パラメータ配列リストoptionsオブジェクトには、次の1つ以上のオプションが含まれます.
cwd文字列-サブプロセスの現在の作業ディレクトリEnvオブジェクト環境のキー値対execPath文字列-サブプロセスを作成するために実行可能execArgv実行可能文字列パラメータ配列リスト(デフォルト:process.execArgv)に渡す
Silent Boolean-trueの場合、標準入力、stdoutおよびサブ標準エラーがパイプを介して親プロセスに転送されます.そうしないと、親から継承され、pipeおよびinheritオプションspawn()の詳細標準入力出力(デフォルトfalse)が表示されます.
uid数値-プロセスのユーザーのアイデンティティを設定します.
gid数値-プロセスのグループIDを設定します.

forkメソッドは、通常のChildProcessインスタンスを有するすべてのメソッドを除いて、オブジェクトに組み込まれた通信チャネルを返す.


2つのJSファイル名をsupportとして作成する.jsとmasterjs:
File: support.js
console.log("Child Process " + process.argv[2] + " executed." );

File: master.js
const fs = require('fs');
const child_process = require('child_process');
 
for(var i=0; i<3; i++) {
   var worker_process = child_process.fork("support.js", [i]);	

   worker_process.on('close', function (code) {
      console.log('child process exited with code ' + code);
   });
}

マスターを実行します.jsが見た結果:
$ node master.js

出力を確認します.サーバが起動しました
Child Process 0 executed.
Child Process 1 executed.
Child Process 2 executed.
child process exited with code 0
child process exited with code 0
child process exited with code 0