Rumah  >  Artikel  >  hujung hadapan web  >  Cipta pelayan nodejs dengan mudah (8): Cara tanpa sekatan dicapai_node.js

Cipta pelayan nodejs dengan mudah (8): Cara tanpa sekatan dicapai_node.js

WBOY
WBOYasal
2016-05-16 16:25:511077semak imbas

Dalam bahagian ini, kita akan melihat cara nodejs melaksanakan operasi tidak menyekat.

Mari ubah suai pengendali permulaan dahulu:

Salin kod Kod adalah seperti berikut:

var exec = memerlukan("proses_anak").exec;
fungsi mula() {
console.log("Permintaan pengendali 'mula' dipanggil.");
var content = "kosong";
exec("ls -lah", fungsi (ralat, stdout, stderr) {
kandungan = stdout;
});
kembalikan kandungan;
}

muat naik fungsi() {
console.log("Pengendali permintaan 'muat naik' telah dipanggil.");
Kembalikan "Hello Upload";
}

exports.start = mula;
exports.upload = muat naik;

Kod ini mencipta kandungan pembolehubah baharu (nilai awal "kosong"), melaksanakan perintah "ls -lah", menyerahkan hasil kepada kandungan dan akhirnya mengembalikan kandungan.

Kami telah memperkenalkan modul Node.js baharu, child_process Sebab kami menggunakannya adalah untuk melaksanakan operasi tanpa sekatan yang mudah dan praktikal: exec().

Jadi apa yang exec() lakukan?

Ia melaksanakan perintah shell daripada Node.js. Dalam contoh di atas, kami menggunakannya untuk mendapatkan semua fail dalam direktori semasa ("ls -lah"), dan kemudian mengeluarkan maklumat fail ke penyemak imbas apabila /startURL diminta.

Kami memulakan pelayan dan melawati "http://localhost:8888/start" dan kami akan mendapati bahawa kandungan output halaman tersebut kosong.

exec() ikut bermain Dengannya, kami boleh melakukan operasi shell yang memakan masa yang sangat lama tanpa memaksa aplikasi kami berhenti dan menunggu operasi.

Walaupun begitu, output kandungan oleh halaman nampaknya bukan hasil yang kita inginkan.

Mari kita analisa sebabnya:

Kod kami dilaksanakan secara serentak, yang bermaksud bahawa selepas memanggil exec(), Node.js akan melaksanakan kandungan kembali dengan segera

Pada masa ini, kandungan masih "kosong" kerana fungsi panggil balik yang dihantar kepada exec() belum lagi dilaksanakan - kerana operasi exec() adalah tak segerak.

Kami akan memperkenalkan cara menyelesaikan masalah ini dalam bahagian seterusnya.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn