Phần 6: Nodejs – Sự kiện lặp – NodeJS căn bản cho người mới bắt đầu

Phần  6: Nodejs – Sự kiện lặp                        – NodeJS căn bản cho người mới bắt đầu

Bài 6: Nodejs – Sự kiện lặp
– NodeJS căn bản cho người mới bắt đầu

 

Node.js là ứng dụng đơn luồng nhưng có hỗ trợ việc xử lí bên cạnh đó qua các định nghĩa về sự kiện và callback. Như toàn bộ các API của Node.js có tính chất không đồng bộ và được xử lí đơn luồng, nó sử dụng hàm async để duy trì sự bên cạnh đó. Node.js sử dụng Observer Pattern. Các Thread trong Node.js giữ 1 Event Loop và bất kỳ lúc nào có tác vụ nào hoàn thành, nó sẽ kích hoạt sự kiện tương ứng để báo cho Event Listener sẵn sàng thực hiện..

1. Event Driven trong Node.js

Node.js sử dụng nhiều sự kiện, đó là nguyên nhân vì sao Node.js tương đối nhanh so với những sản phẩm công nghệ khác. Ngay khi Node khởi động Server của nó, nó sẽ nhanh chóng khởi tạo các biến, khai báo các hàm và rồi đơn giản là đợi chờ những sự kiện xảy ra.
Trong ứng dụng xử lý sự kiện, nhìn tổng thể vòng lặp chính lắng nghe những sự kiện, và rồi set off tới hàm callback khi 1 trong các sự kiện được phát hiện.
Trong khi các Event là tương đối giống nhau như các hàm callback . Điểm khác nhau nằm ở chỗ, hàm callback gọi khi 1 hàm không đồng bộ và trả về kết quả của nó trong khi phần xử lí sự kiện làm việc trên Observer Pattern. Hàm này sẽ lắng nghe những sự kiện, đóng một vai trò như 1 Observers (Người quan sát). Bất kỳ lúc nào 1 sự kiện phát sinh, các hàm Listener của nó sẽ bắt đầu thực thi. Node.js có nhiều sự kiện có sẵn qua occasions Module và lớpEventEmitter có thể dựa vào để bind sự kiện và lắng nghe sự kiện.
Trước khi sử dụng occasion Module, bạn sử dụng phương thức require() để khai báo như dưới đây:
// Import occasions module
var occasions = require('occasions');

// Create an eventEmitter object
var eventEmitter = new occasions.EventEmitter();
Sau đó, để gắn kết Event Handler với 1 sự kiện, bạn sử dụng cú pháp sau:
// Bind occasion and occasion  handler as follows
eventEmitter.on('eventName', occasionHandler);
Bạn sẽ có thể kích hoạt 1 sự kiện do sử dụng phương thức emit() của EventEmitter:
// Fire an occasion 
eventEmitter.emit('eventName');

2. Ví dụ minh họa

Tạo 1 file js với tên là primary.js có đoạn mã sau:
Live Demo
// Import occasions module
var occasions = require('occasions');

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

// Create an occasion handler as follows
var joinHandler = operate linked() 

// Bind the connection occasion with the handler
eventEmitter.on('connection', joinHandler);
 
// Bind the data_received occasion with the nameless operate
eventEmitter.on('data_received', operate() );

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

console.log("Program Ended.");
Chạy chương trình trên như dưới đây:
$ node primary.js
Kết quả đó là:
connection profitable.
information acquired efficiently.
Program Ended.

3. Cách Node.js hoạt động

Trong ứng dụng Node.js, 1 hàm không đồng bộ chấp nhận 1 callback như tham số cuối cùng và hàm callback chấp nhận error như tham số đầu tiên. Cùng nhìn lại ví dụ trước. Tạo 1 textual content file với tên enter.txt với nội dung dưới đây:
Tutorials Point is giving self studying content material
to show the world in easy and straightforward means!!!!!
Trong ví dụ này, mình sử dụng fs Module để xử lý những hoạt động File I/O (mình sẽ trình bày trong chương sau). Đầu tiên, bạn tạo 1 file js với tên là primary.js như dưới đây:
var fs = require("fs");

fs.learnFile('enter.txt', operate (err, information) {
   if (err) {
      console.log(err.stack);
      return;
   }
   console.log(information.toString());
});
console.log("Program Ended");
Tại đây, fs.learnFile() là 1 hàm không đồng bộ hóa với mục đích để đọc file. Nếu như có 1 lỗi nào đấy trong khi đọc file, đối tượng err sẽ chứa lỗi đó, nếu như không thì information sẽ chứa những phần nội dung của file đó. Hàm learnFile truyền err và information tới hàm callback sau khi quá trình đọc file đã hoàn tất, và cuối cùng sẽ in ra nội dung.
Program Ended
Tutorials Point is giving self studying content material
to show the world in easy and straightforward means!!!!!

 

 

admin

Leave a Reply

Your email address will not be published. Required fields are marked *