Cara Membuat Proses Anak dalam Node.js

Cara Membuat Proses Anak Dalam Node Js



Semasa pengaturcaraan dalam ' node.js ”, satu proses tidak pernah cekap untuk mengatasi beban kerja aplikasi yang semakin meningkat. Oleh itu, mungkin terdapat situasi tertentu di mana pembangun perlu mencipta proses baharu, bekerja dengan tugas jangka panjang dan membolehkan interaksi dengan sistem pengendalian. Ini boleh dicapai dengan mencipta proses anak untuk menggunakan pelbagai proses, dengan itu menskalakan aplikasi Node.

Tulisan ini menerangkan kandungan yang disenaraikan di bawah:







Apakah Proses Kanak-kanak?

Proses anak sepadan dengan proses yang dibuat melalui proses lain iaitu, ibu bapa. Node.js menyediakan ' proses_anak ” modul yang memastikan komunikasi berkesan antara proses kanak-kanak. Selain itu, modul ini membantu dalam menggunakan ciri sistem pengendalian dengan melaksanakan sebarang arahan sistem dalam proses kanak-kanak.



Bagaimana untuk Mencipta Proses Kanak-kanak dalam Node.js?

Kanak-kanak itu memproses dalam “ node.js ” boleh dibuat melalui pendekatan yang dinyatakan di bawah:



  • bertelur() ” Kaedah.
  • garpu() ” Kaedah.
  • exec() ” Kaedah.
  • execFile() ” Kaedah.

Pendekatan 1: Mencipta Proses Anak dalam node.js Melalui Kaedah 'spawn()'.

' bertelur() ” kaedah menjana cmdlet dalam proses baharu menggunakan cmdlet yang disediakan dan argumen baris arahan. Contoh ChildProcess menggunakan/melaksanakan API EventEmitter yang membenarkan untuk mendaftarkan pengendali untuk acara pada objek kanak-kanak. Peristiwa ini termasuk keluar, putuskan sambungan, ralat, mesej dan tutup.





Sintaks

proses_anak. bertelur ( cmdlet [ , args ] [ , pilihan ] )

Dalam sintaks ini:



  • cmdlet: Ia memerlukan rentetan yang merupakan cmdlet untuk dilaksanakan.
  • args: Ia merujuk kepada senarai hujah rentetan. Nilai lalai ialah tatasusunan null.
  • ' pilihan ” boleh menjadi “cangkang” yang mengambil nilai Boolean. Ia adalah sedemikian rupa bahawa jika ia adalah ' benar ”, cmdlet dilaksanakan dari dalam shell. Nilai lalai ialah “ salah ” yang bermaksud tiada cangkang. Secara lalai, “ bertelur() ” tidak mencipta/menjana shell untuk menjalankan cmdlet oleh itu, adalah penting untuk menghantarnya sebagai “pilihan” semasa mengakses proses anak.

Nilai Pulangan: Kaedah ini mendapatkan semula objek ChildProcess.

Berikut ialah demonstrasi mencipta proses kanak-kanak:

const { bertelur } = memerlukan ( 'proses_anak' ) ;

const anak = bertelur ( 'awak' , [ 'D: \S ETUPS' ] , { cangkerang : benar } ) ;

anak. stdout . pada ( 'data' , ( data ) => {

konsol. log ( `stdout : $ { data } ` ) ;

} ) ;

anak. stderr . pada ( 'data' , ( data ) => {

konsol. kesilapan ( `stderr : $ { data } ` ) ;

} ) ;

anak. pada ( 'tutup' , ( kod ) => {

konsol. log ( `proses anak keluar dengan kod $ { kod } ` ) ;

} ) ;

Dalam blok kod ini:

  • Pertama sekali, masukkan ' proses_anak ” modul untuk mencipta proses kanak-kanak.
  • Selepas itu, lahirkan proses anak untuk memaparkan kandungan dalam laluan yang ditentukan iaitu, ' D:\SETUPS ”.
  • Akhir sekali, ' dekat acara ” digunakan apabila keseluruhan proses anak keluar dan mesej keluar dipaparkan pada konsol.

Pengeluaran

Di sini, laksanakan cmdlet berikut untuk menjalankan kod dan memaparkan kandungan dalam laluan sasaran:

suhu nod. js

Pendekatan 2: Mencipta Proses Anak dalam node.js Menggunakan Kaedah 'fork()'.

Kaedah ini dikaitkan dengan ' bertelur() ' kaedah di mana komunikasi antara proses anak dan ibu bapa boleh dijalankan melalui ' hantar() ” kaedah.

' garpu() ” kaedah memisahkan tugas pengiraan kompleks daripada gelung peristiwa(utama). Kaedah ini boleh digunakan untuk mengakses berbilang proses kanak-kanak tetapi ia boleh memberi kesan kepada prestasi keseluruhan kerana setiap proses mempunyai ingatan sendiri.

Sintaks

proses_anak. garpu ( mdpath [ , args ] [ , pilihan ] )

Menurut sintaks ini:

  • mdpath ” mengambil rentetan yang mewakili modul untuk dilaksanakan dalam kanak-kanak.
  • args ” merujuk kepada senarai hujah rentetan.
  • pilihan ” boleh menjadi “execPath”, “env”, “CWD”, “detached” dan “execArgv”.

Nilai Pulangan: Kaedah ini mendapatkan semula contoh ChildProcess.

Kod(Proses Induk)

Sekarang, pergi melalui blok kod yang diberikan di bawah yang membolehkan komunikasi antara proses ibu bapa dan anak dengan bantuan ' hantar() ' kaedah:

const cp = memerlukan ( 'proses_anak' ) ;

biarkan anak = cp. garpu ( __nama nama + '/fork2.js' ) ;

anak. pada ( 'mesej' , fungsi ( x ) {

konsol. log ( 'Proses ibu bapa mendapat:' , x ) ;

} ) ;

anak. hantar ( { hello : 'dari proses ibu bapa' } ) ;

anak. pada ( 'tutup' , ( kod ) => {

konsol. log ( `proses anak keluar dengan kod $ { kod } ` ) ;

} ) ;

Dalam kod ini:

  • Begitu juga, masukkan ' proses_anak ” modul untuk mencipta proses kanak-kanak.
  • Sekarang, nyatakan laluan proses anak melalui “ garpu() ” kaedah.
  • Akhir sekali, paparkan mesej yang mewakili proses induk melalui ' hantar() ” kaedah dan paparkan ralat yang dihadapi jika ada.

Kod(Proses Kanak-kanak)

Fail kod berikut iaitu, “ fork2.js ” mewakili proses anak yang turut menghantar mesej menggunakan “ hantar() ” kaedah, seperti berikut:

proses. pada ( 'mesej' , fungsi ( m ) {

konsol. log ( 'Proses kanak-kanak mendapat:' , m ) ;

} ) ;

proses. hantar ( { hello : 'dari proses kanak-kanak' } ) ;

Pengeluaran

Sekarang, jalankan cmdlet yang diberikan di bawah untuk melaksanakan kod:

anak fork nod. js

Daripada output ini, disahkan bahawa komunikasi proses ibu bapa dan anak dijalankan dengan sewajarnya.

Pendekatan 3: Mencipta Proses Anak dalam node.js Menggunakan Kaedah 'exec()'.

' exec() ” kaedah mula-mula mencipta shell dan kemudian menjalankan cmdlet. Kaedah ini akan digunakan untuk mendapatkan semula jumlah direktori.

Sintaks

proses_anak. eksekutif ( cmdlet [ , pilihan ] [ , panggil balik ] )

Dalam sintaks yang diberikan:

  • cmdlet ” mengambil rentetan yang mewakili perintah untuk dilaksanakan dengan hujah yang dipisahkan oleh ruang.
  • ' pilihan ” termasuk “cwd”, “pengekodan”, “shell” dsb.
  • ' panggil balik fungsi ” digunakan apabila proses/operasi tamat.

Nilai Pulangan

Kaedah ini mendapatkan semula contoh ChildProcess.

Sekarang, teruskan ke kod yang menyenaraikan bilangan direktori:

const { eksekutif } = memerlukan ( 'proses_anak' ) ;
eksekutif ( 'dir | cari /c /v ''' , ( ralat, stdout, stderr ) => {
jika ( ralat ) {
konsol. ralat ( `kesilapan exec : $ { ralat } ` ) ;
kembali ;
}
konsol. log ( `stdout : Nombor daripada Direktori -> $ { stdout } ` ) ;
jika ( stderr != '' )
konsol. ralat ( `stderr : $ { stderr } ` ) ;
} ) ;

Dalam coretan kod ini, sertakan ' proses_anak ” modul untuk mencipta/membuat proses anak. Selepas itu, hadapi pengecualian/ralat yang dihadapi dan paparkan jumlah bilangan direktori dalam direktori kerja semasa.

Pengeluaran

Jalankan kod berikut untuk menjalankan kod:

nod execchild. js

Dalam output ini, ia boleh tersirat bahawa jumlah direktori dalam direktori kerja semasa dipaparkan.

Pendekatan 4: Mencipta Proses Anak dalam node.js Menggunakan Kaedah execFile().

Di dalam ' execFile() ' kaedah, fail boleh laku sasaran dihasilkan secara langsung dalam bentuk proses baharu oleh itu ia lebih cekap daripada ' exec() ” kaedah. Kaedah ini menghasilkan ' execchild.js ” fail dalam bentuk proses baharu.

Sintaks

proses_anak. execFile ( nama fail [ , args ] [ , pilihan ] [ , panggil balik ] )

Dalam sintaks yang diberikan:

  • nama fail ” mengambil rentetan yang mewakili nama atau laluan fail untuk dilaksanakan.
  • args ” sepadan dengan senarai hujah rentetan.
  • ' pilihan ” termasuk “cwd”, “pengekodan”, “shell” dsb.
  • ' panggil balik fungsi ” digunakan apabila proses tamat. Argumen fungsi boleh menjadi ralat, stdout, dll.

Nilai Pulangan

Kaedah ini juga mendapatkan semula contoh ChildProcess.

Sekarang, pertimbangkan kod berikut yang menghasilkan fail boleh laku sasaran sebagai proses baharu:

const { execFile } = memerlukan ( 'proses_anak' ) ;
const x = execFile ( 'nod' , [ 'execchild.js' ] ,
( ralat, stdout, stderr ) => {
jika ( ralat ) {
melontar ralat ;
}
konsol. log ( stdout ) ;
} ) ;

Berdasarkan baris kod ini, gunakan langkah berikut:

  • Ulangi prosedur yang dibincangkan untuk memasukkan “ proses_anak ” modul.
  • Dalam langkah seterusnya, gunakan ' execFile() ” kaedah yang menghasilkan fail boleh laku yang ditentukan (dibincangkan dalam pendekatan sebelumnya) sebagai proses baharu, dengan itu menyenaraikan jumlah direktori dalam direktori kerja.

Pengeluaran

Jalankan cmdlet di bawah untuk menjalankan kod:

fail eksekusi nod. js

Dalam hasil ini, ia boleh disahkan bahawa fail boleh laku yang ditentukan dihasilkan dan bilangan direktori dipaparkan.

Kesimpulan

Proses anak dalam Node.js boleh dibuat melalui “ bertelur() kaedah ', ' garpu() kaedah ', ' exec() ' kaedah, atau ' execFile() ” kaedah. Pendekatan ini melahirkan proses anak, membolehkan komunikasi proses ibu bapa-anak, atau senaraikan direktori dalam direktori kerja semasa (secara langsung atau melalui pembiakan fail boleh laku sasaran), masing-masing.