Node.js - Ölçeklendirme Uygulaması

Node.js tek iş parçacığı modunda çalışır, ancak eşzamanlılığı işlemek için olay odaklı bir paradigma kullanır. Ayrıca, çok çekirdekli CPU tabanlı sistemlerde paralel işlemeden yararlanmak için alt süreçlerin oluşturulmasını kolaylaştırır.

Alt süreçlerin her zaman üç akışı vardır child.stdin, child.stdout, ve child.stderr üst sürecin standart akışları ile paylaşılabilir.

Düğüm sağlar child_process Bir çocuk süreci oluşturmak için aşağıdaki üç ana yola sahip olan modül.

  • exec - child_process.exec yöntemi, kabukta / konsolda bir komut çalıştırır ve çıktıyı arabelleğe alır.

  • spawn - child_process.spawn, belirli bir komutla yeni bir işlem başlatır.

  • fork - child_process.fork yöntemi, alt süreçler oluşturmak için spawn () yönteminin özel bir durumudur.

Exec () yöntemi

child_process.exec yöntemi, bir kabukta bir komut çalıştırır ve çıktıyı arabelleğe alır. Aşağıdaki imzaya sahiptir -

child_process.exec(command[, options], callback)

Parametreler

İşte kullanılan parametrelerin açıklaması -

  • command (Dize) Boşluklarla ayrılmış bağımsız değişkenlerle çalıştırılacak komut

  • options (Nesne) aşağıdaki seçeneklerden birini veya birkaçını içerebilir -

    • cwd (Dize) Alt sürecin geçerli çalışma dizini

    • env (Nesne) Ortam anahtar / değer çiftleri

    • encoding (Dize) (Varsayılan: 'utf8')

    • shell (Dize) Komutu çalıştırmak için kabuk (Varsayılan: UNIX'te '/ bin / sh', Windows'ta 'cmd.exe', Kabuk UNIX'teki -c anahtarını veya Windows'ta / s / c'yi anlamalıdır. Windows'ta, komut satırı ayrıştırması cmd.exe ile uyumlu olmalıdır.)

    • timeout (Sayı) (Varsayılan: 0)

    • maxBuffer (Sayı) (Varsayılan: 200 * 1024)

    • killSignal (Dize) (Varsayılan: 'SIGTERM')

    • uid (Sayı) İşlemin kullanıcı kimliğini ayarlar.

    • gid (Sayı) İşlemin grup kimliğini ayarlar.

  • callback İşlev üç argüman alır error, stdout, ve stderr işlem sona erdiğinde çıktıyla çağrılır.

Exec () yöntemi, maksimum boyuta sahip bir arabellek döndürür ve işlemin bitmesini bekler ve arabelleğe alınan tüm verileri aynı anda döndürmeye çalışır.

Misal

Support.js ve master.js adlı iki js dosyası oluşturalım -

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);
   });
}

Şimdi sonucu görmek için master.js'yi çalıştırın -

$ node master.js

Çıkışı doğrulayın. Sunucu başladı.

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 () Yöntemi

child_process.spawn yöntemi, belirli bir komutla yeni bir işlem başlatır. Aşağıdaki imzaya sahiptir -

child_process.spawn(command[, args][, options])

Parametreler

İşte kullanılan parametrelerin açıklaması -

  • command (Dize) Çalıştırma komutu

  • args (Dizi) Dize bağımsız değişkenlerinin listesi

  • options (Nesne) aşağıdaki seçeneklerden birini veya birkaçını içerebilir -

    • cwd (Dize) Alt sürecin geçerli çalışma dizini.

    • env (Nesne) Ortam anahtar / değer çiftleri.

    • stdio (Dizi) String Child'ın stdio yapılandırması.

    • customFds (Dizi) Stdio için alt çocuğun kullanması için Kullanımdan Kaldırılmış Dosya tanımlayıcıları.

    • detached (Boolean) Çocuk, bir süreç grubu lideri olacaktır.

    • uid (Sayı) İşlemin kullanıcı kimliğini ayarlar.

    • gid (Sayı) İşlemin grup kimliğini ayarlar.

Spawn () yöntemi akışları (stdout & stderr) döndürür ve işlem bir miktar veri döndürdüğünde kullanılmalıdır. spawn (), işlem çalışmaya başlar başlamaz yanıtı almaya başlar.

Misal

Support.js ve master.js adlı iki js dosyası oluşturun -

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);
   });
}

Şimdi sonucu görmek için master.js'yi çalıştırın -

$ node master.js

Çıkışı doğrulayın. Sunucu başladı

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

Çatal () Yöntemi

child_process.fork yöntemi, Node işlemleri oluşturmak için özel bir spawn () durumudur. Aşağıdaki imzaya sahiptir -

child_process.fork(modulePath[, args][, options])

Parametreler

İşte kullanılan parametrelerin açıklaması -

  • modulePath (Dize) Altta çalışacak modül.

  • args (Dizi) Dize bağımsız değişkenlerinin listesi

  • options (Nesne) aşağıdaki seçeneklerden birini veya birkaçını içerebilir -

    • cwd (Dize) Alt sürecin geçerli çalışma dizini.

    • env (Nesne) Ortam anahtar / değer çiftleri.

    • execPath (Dize) Yürütülebilir, alt süreci oluşturmak için kullanılır.

    • execArgv (Dizi) Yürütülebilir dosyaya aktarılan dize bağımsız değişkenlerinin listesi (Varsayılan: process.execArgv).

    • silent (Boolean) Eğer alt öğenin true, stdin, stdout ve stderr'i üst öğeye aktarılacaksa, aksi takdirde bunlar ebeveynden miras alınacaktır, daha fazlası için spawn () 'ın stdio'su için "boru" ve "miras" seçeneklerine bakın ayrıntılar (varsayılan yanlıştır).

    • uid (Sayı) İşlemin kullanıcı kimliğini ayarlar.

    • gid (Sayı) İşlemin grup kimliğini ayarlar.

Çatal yöntemi, normal bir ChildProcess örneğindeki tüm yöntemlere sahip olmanın yanı sıra yerleşik bir iletişim kanalına sahip bir nesne döndürür.

Misal

Support.js ve master.js adlı iki js dosyası oluşturun -

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);
   });
}

Şimdi sonucu görmek için master.js'yi çalıştırın -

$ node master.js

Çıkışı doğrulayın. Sunucu başladı.

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