NodeJS 77 !

Một phần của tài liệu xây dựng và phát triển ứng dụng hỗ trợ thiết kế phần mềm trên môi trường web (Trang 79 - 81)

Trang web chính thức: http://nodejs.org/

NodeJS là một hệ thống phần mềm được thiết kế để viết các ứng dụng internet có khả năng mở rộng, đặc biệt là máy chủ web. Chương trình được viết bằng ngôn ngữ

JavaScript, sử dụng các kỹ thuật lập trình hướng sự kiện, bất đồng bộ nhập/xuất nhằm giảm thiểu chi phí và tăng tính mở rộng của hệ thống.

NodeJS xây dựng bên trong nó một thư viện chứ nhiều hàm làm việc với giao thức HTTP. Với NodeJS, chúng ta có thể xây dựng một máy chủ web mà không cần phải cài đặt thêm phần mềm nào khác như Apache hay IIS. Đồng thời NodeJS hỗ trợ các nhà phát triển web có thể xây dựng toàn bộ một ứng dụng web từ server đến client chỉ

với bằng ngôn ngữ lập trình JavaScript.

Một đặc điểm nổi bậc của NodeJS là non-blocking I/O. Non-blocking I/O hay còn gọi là asynchronous I/O, tạm dịch là bất đồng bộ nhập xuất. Tư tưởng non-blocking này không phải mới có ở NodeJS, trên một số hệ điều hành phổ biến ví dụ Windows cũng cho phép các lập trình viên cài đặt non-blocking I/O khi đọc ghi tập tin hay lập trình mạng với socket.

Xét một chương trình đơn giản như sau: 1. Mở tập tin.

2. Đọc nội dung tập tin.

3. Lấy kết quảđọc được và thực hiện tính toán. 4. Thực hiện công việc 2.

78 5. Thực hiện công việc 3.

Nếu theo mô hình blocking I/O hay còn gọi là synchronous I/O, tạm dịch là đồng bộ nhập xuất, khi thực hiện câu lệnh số hai, thì hệđiều hành sẽ gọi ổ đĩa thực hiện các thao tác đọc dữ liệu, lúc này chương trình sẽ phải chờ cho đến khi ổđĩa thực hiện xong nhiệm vụ đọc ghi. Vấn đề ở đây là khi ổ đĩa đang thực thiện đọc ghi thì CPU sẽ trong trạng thái rỗi. Nếu như từ câu lệnh số ba trở đi đều phụ thuộc vào kết quả của câu lệnh số hai thì việc chờ này chấp nhận được. Nhưng trong trường hợp từ câu lệnh số bốn hay số năm trở về sau không phụ thuộc vào kết quả I/O ở câu lệnh số hai thì việc CPU rỗi là quá phí phạm.

Với mô hình non-blocking I/O sẽ giải quyết được vấn đề trên. Có thể bắt đầu thực hiện thao tác nhập xuất và đồng thời ngay sau đó thực hiện các tác vụ khác mà các tác vụđó không phụ thuộc vào kết quả nhập xuất trước đó. Một phương pháp cài đặt phổ

biến của non-blocking I/O là callback-function (hàm gọi lại). Phương pháp này là khi thực hiện thao tác I/O ta truyền thêm một callback function và chương trình không cần chờ thao tác I/O này thực hiện xong mới có thể thực hiện các tác vụ khác. Sau khi thực hiện xong thao tác I/O thì callback function này sẽđược tựđộng gọi và tại đây các tác vụ nào phụ thuộc vào kết quả I/O sẽđược gọi thực hiện.

Ứng dụng trong NodeJS và xây dựng ứng dụng web, khi có một yêu cầu gửi đến server thì các thao tác tốn nhiều thời gian như đọc ghi cơ sở dữ liệu, gọi các dịch vụ

web sẽ đưa vào dạng non-blocking I/O. Trong thời gian chờ các thao tác I/O này thực hiện xong thì server có thể nhận thêm các yều cầu khác. Khác với phương pháp truyền thống là server chỉ lần lượt xử lý từng yêu cầu, xong yêu cầu này mới đến yêu cầu khác.

79

Một phần của tài liệu xây dựng và phát triển ứng dụng hỗ trợ thiết kế phần mềm trên môi trường web (Trang 79 - 81)