Node.js - Vòng lặp sự kiện

Node.js là một ứng dụng đơn luồng, nhưng nó có thể hỗ trợ đồng thời thông qua khái niệm eventcallbacks. Mọi API của Node.js là không đồng bộ và là đơn luồng, chúng sử dụngasync function callsđể duy trì đồng thời. Node sử dụng mẫu người quan sát. Node thread lưu giữ một vòng lặp sự kiện và bất cứ khi nào một nhiệm vụ được hoàn thành, nó sẽ kích hoạt sự kiện tương ứng để báo hiệu cho hàm lắng nghe sự kiện thực thi.

Lập trình theo hướng sự kiện

Node.js sử dụng nhiều sự kiện và đó cũng là một trong những lý do tại sao Node.js khá nhanh so với các công nghệ tương tự khác. Ngay sau khi Node khởi động máy chủ của nó, nó chỉ cần khởi tạo các biến của nó, khai báo các hàm và sau đó chỉ cần đợi sự kiện xảy ra.

Trong ứng dụng hướng sự kiện, thường có một vòng lặp chính lắng nghe các sự kiện và sau đó kích hoạt một hàm gọi lại khi một trong những sự kiện đó được phát hiện.

Mặc dù các sự kiện trông khá giống với các hàm gọi lại, nhưng sự khác biệt nằm ở chỗ các hàm gọi lại được gọi khi một hàm không đồng bộ trả về kết quả của nó, trong khi xử lý sự kiện hoạt động trên mẫu quan sát. Các chức năng lắng nghe các sự kiện hoạt động nhưObservers. Bất cứ khi nào một sự kiện được kích hoạt, hàm lắng nghe của nó sẽ bắt đầu thực thi. Node.js có nhiều sự kiện tích hợp sẵn thông qua mô-đun sự kiện và lớp EventEmitter được sử dụng để liên kết sự kiện và trình nghe sự kiện như sau:

// Import events module
var events = require('events');

// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

Sau đây là cú pháp để liên kết trình xử lý sự kiện với một sự kiện:

// Bind event and event  handler as follows
eventEmitter.on('eventName', eventHandler);

Chúng ta có thể kích hoạt một sự kiện theo chương trình như sau:

// Fire an event 
eventEmitter.emit('eventName');

Thí dụ

Tạo tệp js có tên là main.js với mã sau:

// Import events module
var events = require('events');

// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

// Create an event handler as follows
var connectHandler = function connected() {
   console.log('connection succesful.');
  
   // Fire the data_received event 
   eventEmitter.emit('data_received');
}

// Bind the connection event with the handler
eventEmitter.on('connection', connectHandler);
 
// Bind the data_received event with the anonymous function
eventEmitter.on('data_received', function() {
   console.log('data received succesfully.');
});

// Fire the connection event 
eventEmitter.emit('connection');

console.log("Program Ended.");

Bây giờ chúng ta hãy thử chạy chương trình trên và kiểm tra đầu ra của nó -

$ node main.js

CNTT sẽ tạo ra kết quả sau:

connection successful.
data received successfully.
Program Ended.

Ứng dụng Node hoạt động như thế nào?

Trong Ứng dụng nút, bất kỳ hàm không đồng bộ nào chấp nhận một cuộc gọi lại làm tham số cuối cùng và một hàm gọi lại chấp nhận một lỗi là tham số đầu tiên. Hãy xem lại ví dụ trước một lần nữa. Tạo một tệp văn bản có tên input.txt với nội dung sau.

Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!

Tạo tệp js có tên là main.js có mã sau:

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {
   if (err) {
      console.log(err.stack);
      return;
   }
   console.log(data.toString());
});
console.log("Program Ended");

Ở đây fs.readFile () là một hàm không đồng bộ có mục đích là để đọc một tệp. Nếu một lỗi xảy ra trong quá trình đọc, thìerr object sẽ chứa lỗi tương ứng, dữ liệu khác sẽ chứa nội dung của tệp. readFile chuyển lỗi và dữ liệu đến hàm gọi lại sau khi hoạt động đọc hoàn tất, cuối cùng sẽ in nội dung.

Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!