Node.js - Ứng dụng mở rộng

Cùng tham khảo tiếp nội dung bài viết dưới đây của Taimienphi.vn để tìm hiểu về Node.js - Ứng dụng mở rộng nhé.

Node.js - Ứng dụng mở rộng

Mục Lục bài viết:
1. Node.js - Ứng dụng mở rộng
2. Phương thức exec() trong Node.js
3. Phương thức spawn() trong Node.js
4. Phương thức fork() trong Node.js

1. Node.js - Ứng dụng mở rộng

Node.js chạy trong chế độ single-thread, nhưng nó sử dụng mô hình lập trình hướng sự kiện để xử lý đồng thời, tạo điều kiện để tạo các child process (tiến trình con) thúc đẩy việc xử lý song song trên các hệ thống dựa trên CPU đa lõi.

Child process có 3 stream là child.stdin, child.stdout và child.stderr, có thể được chia sẻ với stream stdio của parent process.

Node cung cấp module child_process dưới đây để tạo child process:

- exec: phương thức child_process.exec chạy một lệnh trong shell/console và trả về đầu ra buffer.

- spawn: phương thức child_process.spawn khởi chạy một process mới với lệnh đã cho.

- fork: phương thức child_process.fork là một trường hợp đặc biệt của spawn() để tạo các child process.

2. Phương thức exec() trong Node.js

Phương thức child_process.exec chạy một lệnh trong shell và đầu ra buffer. Nó sử dụng chữ ký dưới đây:

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

Trong đó:

- command (chuỗi) là lệnh để chạy, với các tham số được phân cách bằng dấu cách.

- options (đối tượng) có thể bao gồm một hoặc nhiều tùy chọn dưới đây:

+ cwd (chuỗi): thư mục làm việc hiện tại của child process.

+ env (đối tượng): cặp key - value Environment.

+ encoding (chuỗi) (mặc định: 'utf8').

+ shell (chuỗi): Shell để thực thi lệnh, trong đó '/bin/sh' mặc định trên UNIX, 'cmd.exe' trên Windows. Shell sẽ hiểu lệnh chuyển đổi -c trên UNIX hoặc /s/c trên Windows. Trên Windows, phân tích cú pháp dòng lệnh phải tương thích với cmd.exe.

+ timeout (số) (mặc định: 0).

+ maxBuffer (Số) (mặc định: 200 * 1024).

+ killSignal (chuỗi) (mặc định: 'SIGTERM').

+ uid (số): thiết lập nhận dạng người dùng của process.

+ gid (số): thiết lập nhận dạng group của process.

- Callback: hàm này sẽ nhận 3 đối số là error, stdout, và stderr, các đối số này được gọi với đầu ra khi process kết thúc.

Phương thức exec() trả về một buffer với kích thước tối đa và chờ process để kết thúc, cố gắng trả về tất cả các dữ liệu buffer cùng một lúc.

Ví dụ

Tạo 2 file js đặt tên lần lượt là support.jsmaster.js:

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

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

});

}

Tiếp theo chạy file master.js để xem kết quả:

node master.js

Xác nhận đầu ra, server đã khởi động.

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.

3. Phương thức spawn() trong Node.js

Phương thức child_process.spawn khởi chạy một process mới với lệnh đã cho, phương thức này sử dụng chữ ký dưới đây:

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

Trong đó:

- Command (chuỗi) là lệnh để chạy.

- args (mảng): danh sách chuỗi đối số.

- options (đối tượng) có thể bao gồm một hoặc nhiều tùy chọn dưới đây:

+ cwd (chuỗi): thư mục làm việc hiện tại của child process.

+ env (đối tượng): cặp key - value Environment.

+ stdio (mảng) chuỗi cấu hình stdio của Child.

+ customFds (mảng): các file không được chấp nhận để child sử dụng cho stdio.

+ detached (Boolean): child sẽ đứng đầu process.

+ uid (số): thiết lập nhận dạng người dùng của process.

+ gid (số): thiết lập nhận dạng group của process.

Phương thức spawn() trả về các stream (stdout &stderr) và được sử dụng khi process tả về khối dữ liệu. spawn() bắt đầu nhận phản hồi ngay sau khi process bắt đầu thực thi.

Ví dụ

Tạo 2 file js đặt tên lần lượt là support.jsmaster.js:

File: support.js:

console.log("Child Process " + process.argv[2] + " executed." );

File: master.js:

const child_process = require('child_process');

for(var i = 0; i<3;>

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

});

}

Tiếp theo chạy master.js để xem kết quả:

node master.js

Xác nhận đầu ra và server khởi động:

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

4. Phương thức fork() trong Node.js

Phương thức child_process.fork là trường hợp đặc biệt của spawn() để tạo các process Node, nó sử dụng chữ ký dưới đây:

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

Trong đó:

- modulePath (chuỗi): Là module để chạy trong child.

- args (mảng): Danh sách chuỗi đối số.

- options (đối tượng) có thể bao gồm một hoặc nhiều tùy chọn dưới đây:

+ cwd (chuỗi): thư mục hoạt động hiện tại của process child.

+ env (đối tượng): cặp key - value Environment.

+ execPath (chuỗi): được sử dụng để tạo ra child process.

+ execArgv (mảng): danh sách chuỗi đối số được gán cho file thực thi (mặc định: process.execArgv).

+ silent (Boolean): nếu giá trị là true, stdin, stdout và stderr của child sẽ được gửi đến process cha, nếu không nó sẽ được thừa kế từ process cha.

+ uid (số): thiết lập nhận dạng người dùng của process.

+ gid (số): thiết lập nhận dạng group của process.

Phương thức fork trả về một đối tượng với kênh giao tiếp được tích hợp trong tất cả các phương thức của biến thể ChildProcess bình thường.

Ví dụ

Tạo 2 file js đặt tên lần lượt là support.jsmaster.js:

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

var worker_process = child_process.fork("support.js", [i]);

worker_process.on('close', function (code) {

console.log('child process exited with code ' + code);

});

}

Tiếp theo chạy master.js để xem kết quả:

node master.js

Xác nhận đầu ra và server khởi động:

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

Bài viết trên đây Taimienphi.vn vừa giới thiệu cho bạn vè Node.js - Ứng dụng mở rộng. Nếu có bất kỳ thắc mắc hoặc câu hỏi nào cần giải đáp, bạn đọc vui lòng để lại ý kiến của mình trong phần bình luận bên dưới bài viết. Ngoài ra bạn đọc có thể tham khảo thêm một số bài viết khác đã có trên Taimienphi.vn để tìm hiểu về Express Framework trong Node.js nhé.

Trong bài viết dưới đây Taimienphi.vn sẽ giới thiệu tiếp cho bạn về Node.js - Ứng dụng mở rộng. Ngoài ra bạn đọc có thể tham khảo thêm một số bài viết khác trên Taimienphi.vn để tìm hiểu thông tin về RESTful API trong Node.js là gì nhé.
NPM trong Node.js là gì?
Làm quen với Express Framework trong Node.js
Cách cài đặt Node.js và NPM trên Ubuntu 18.04
Học Node.js từ cơ bản tới nâng cao
EventEmitter trong Node.js là gì?
Sửa lỗi tiện ích mở rộng IDM bị gỡ khỏi Google Chrome

ĐỌC NHIỀU