NodeJS là gì ? Những điều cơ bản cần biết về NodeJS

NodeJS là một mã nguồn được xây dựng dựa trên nền tảng Javascript V8 Engine, nó được sử dụng để xây dựng các ứng dụng web như các trang video clip, các forum và đặc biệt là trang mạng xã hội phạm vi hẹp. NodeJS là một mã nguồn mở được sử dụng rộng bởi hàng ngàn lập trình viên trên toàn thế giới8 min


1066
1.7k share, 1066 points

NodeJS là gì?

  • NodeJS là một mã nguồn được xây dựng dựa trên nền tảng Javascript V8 Engine. Nó được xây dựng để chạy trên server.
  • Javascript là ngôn ngữ hướng sự kiện, do đó bất cứ điều gì xảy ra trên server đều tạo ra sự kiện non-blocking. Nên 1 website sử dụng NodeJS đáp ứng được việc truy cập cùng lúc một lượng user cực kì lớn.
  • Vậy NodeJS thích hợp để làm gì. Với các đặc trưng của mình thì NodeJS thích hợp để xây dựng các ứng dụng thời gian thực. Ví dụ như hệ thống chat online hoặc hệ thông thông báo…
  • Và cũng như nhiều ngôn ngữ chạy phía server khác, NodeJS cũng có một cộng đồng phát triển rất lớn. Nhiều framework sử dụng core NodeJS ra đời, một trong số các framework phổ biến nhất hiện nay là Express. Chúng ta sẽ cùng tìm hiểu về framework này phía dưới đây.

Các đặc tính của NodeJS

Khả năng bất đồng bộ

  • Tất cả các API của NodeJS đều không đồng bộ (none-blocking), nó chủ yếu dựa trên nền của NodeJS Server và chờ đợi Server trả dữ liệu về.
  • Việc di chuyển máy chủ đến các API tiếp theo khi gọi và cơ chế thông báo các sự kiện. Giúp máy chủ để có được một phản ứng từ các cuộc gọi API trước (Realtime).

Tốc độ nhanh

  • NodeJS được xây dựng dựa vào nền tảng V8 Javascript Engine nên việc thực thi chương trình rất nhanh.

Khả năng đơn luồng

  • Nhưng khả năng mở rộng cao: Node.js sử dụng một mô hình luồng duy nhất với sự kiện lặp.
  • Cơ chế tổ chức sự kiện giúp các máy chủ để đáp ứng một cách không ngăn chặn và làm cho máy chủ cao khả năng mở rộng.
  • Sử dụng một chương trình đơn luồng và các chương trình tương tự có thể cung cấp dịch vụ cho một số lượng lớn hơn nhiều so với yêu cầu máy chủ

Khả năng không đệm (NoCache)

  • NodeJS không đệm bất kì một dữ liệu nào và các ứng dụng này chủ yếu là đầu ra dữ liệu.

NodeJS làm việc như thế nào?

  • Ý tưởng chính của Node js là sử dụng non-blocking, hướng sự vào ra dữ liệu thông qua các tác vụ thời gian thực một cách nhanh chóng.
  • Node js có khả năng mở rộng nhanh chóng, khả năng xử lý một số lượng lớn các kết nối đồng thời bằng thông lượng cao.
  • Nếu như các ứng dụng web truyền thống, các request tạo ra một luồng xử lý yêu cầu và chiếm RAM của hệ thống. Việc tài nguyên của hệ thống sẽ được sử dụng không hiệu quả.
  • Chính vì lẽ đó giải pháp mà Node js đưa ra là sử dụng luồng đơn (Single-Threaded), kết hợp với non-blocking I/O để thực thi các request, cho phép hỗ trợ hàng chục ngàn kết nối đồng thời.

NPM: The NodeJS Package Manager

Khi thảo luận về Node js thì một điều chắc chắn không nên bỏ qua là xây dựng package quản lý sử dụng các cộng cụ NPM mà mặc định với mọi cài đặt Node js. Ý tưởng của mô-đun NPM là khá tương tự như Ruby-Gems: một tập hợp các hàm có sẵn có thể sử dụng được, thành phần tái sử dụng, tập hợp các cài đặt dễ dàng thông qua kho lưu trữ trực tuyến với các phiên bản quản lý khác nhau.

Danh sách các mô-đun có thể tìm trên web NPM package hoặc có thể truy cập bằng cách sử dụng công cụ NPM CLI sẽ tự động cài đặt với Node js.

Các module phổ biến

  • expressjs.com/ – Express.js, một Sinatra-inspired web framework khá phát triển của Node.js. Bạn có thể tham khảo Từng bước tạo RESTful API với Node.js , Express, MySQL
  • connect – là một mở rộng của HTTP server, cung cấp một bộ sưu tập hiệu suất cao “plugins” như là trung gian; phục vụ như một nền tảng cơ sở cho Express
  • socket.io and sockjs – Hai thành phần Server-side websockets components nổi tiếng nhất hiện nay.
  • Jade – Một trong những engines mẫu, lấy cảm hứng từ HAML, một phần mặc định trong Express.js.
  • mongo and mongojs – MongoDB hàm bao để cung cấp các API cho cơ sở dữ liệu đối tượng trong MongoDB Node.js . Bạn có thể tham khảo
  • redis – thư viện Redis client.
  • coffee-script – CoffeeScript trình biên dịch cho phép developers viết các chương trình Node.js của họ dùng Coffee.
  • underscore (lodash, lazy) – Thư viện tiện ích phổ biến nhất trong JavaScript, package được sử dụng với Node.js.
  • forever – Có lẽ là tiện ích phổ biến nhất để đảm bảo rằng một kịch bản chạy liên tục. Giữ quá trình Node.js của bạn lên trong sản xuất đối mặt với bất kỳ thất bại không ngờ tới.

Thực tiễn của Node.JS

Chẳng hạn như Chat trong thời gian thực. Ứng dụng điển hình nhất, thông qua nhiều giao thức độc quyền và mở chạy trên các cổng không chuẩn. Với khả năng thực hiện tất cả mọi thứ trong Node.js với WebSockets chạy qua port 80.

Các ứng dụng chat thực sự là ví dụ điển hình nhất của Node.js:

  • Ứng dụng trao đổi thông tin nhanh chóng, lưu lượng truy cập cao, dữ liệu chuyên sâu ứng dụng chạy trên các thiết bị phân phối.
  • Nó cũng là một trường hợp tuyệt vời cho học tập.
  • Vì nó bao gồm hầu hết các mô hình được sử dụng trong một ứng dụng Node.js điển hình.

Trong ví dụ đơn giản nhất này, chúng tôi có một phòng chat đơn trên trang web của chúng tôi, nơi mọi người đến và có thể trao đổi một hoặc nhiều tin nhắn (trên thực tế tất cả). Ví dụ, có ba người trên tất cả các trang web kết nối với bảng tin của chúng tôi.

Chat trên NodeJS

Trên phía máy chủ, chúng ta có một ứng dụng đơn giản Express.js mà thực hiện hai điều:

  • GET ‘/’ xử lý yêu cầu phục vụ các trang web chứa cả một bảng thông báo và một nút “Send” để khởi đầu vào tin nhắn mới.
  • Một máy chủ WebSockets mà nghe cho thư mới được phát ra bởi các client WebSocket.
  • Bên phía Client, chúng ta có một trang HTML với một vài xử lý thiết lập cho một sự kiện nhấn vào nút “Send”.
  • Chọn lên các thông báo đầu vào và gửi nó xuống WebSocket.
  • Và ho message mới đến client WebSockets khác (tức là, các tin nhắn được gửi bởi người dùng khác. Bên phía server muốn hiển thị trên toàn bộ các client).

Phân tích và hiểu rõ luồng hoạt động của NodeJS

  • Trình duyệt bắt sự kiện nhấn nút “Send” thông qua một trình xử lý JavaScript, chọn lên các giá trị từ các trường đầu vào (tức là, các tin nhắn văn bản).
  • Và phát ra một thông điệp WebSocket sử dụng máy khách kết nối với máy chủ WebSocket (khởi tạo trên web khởi tạo trang).
  • Phần phía máy chủ của các kết nối WebSocket nhận message và chuyển tiếp nó tới tất cả các client kết nối khác sử dụng các phương thức broadcast.
  • Tất cả các client nhận được message mới như tin nhắn push thông qua một thành phần client-side WebSockets chạy trong trang web. Họ lấy nội dung và cập nhật các trang web bằng cách thêm các bài viết mới cho broadcast. 
  • Đối với một giải pháp mạnh mẽ hơn, bạn có thể sử dụng một bộ nhớ cache đơn giản dựa trên các lưu trữ Redis.
  • Hoặc trong một giải pháp tiên tiến hơn, một hàng đợi các message để xử lý việc định tuyến các message đến các client. Và một cơ chế phân phối mạnh mẽ hơn nên có thể trang trải cho các khoản lỗ kết nối tạm thời hoặc tin nhắn lưu trữ cho khách hàng đã đăng ký khi họ offline.
  • Nhưng bất kể những cải tiến mà bạn thực hiện, Node.js hoạt động theo các nguyên tắc cơ bản:
    • Phản ứng với các sự kiện
    • Xử lý nhiều kết nối đồng thời
    • Và duy trì tính lưu động trong trải nghiệm người dùng.

Kết luận

NodeJS đã và đang phát triển rất mạnh trên con đường ứng dụng. Khi khả năng tốc độ xử lý trang để thực hiện bất kì thao tác nào trên ứng dụng. Giúp người dùng và cả người phát triển giảm bớt được thời gian.

Bạn có thể tham khảo thêm bài Framework Express ? Và tạo ứng dụng chat trên NodeJS 


Like it? Share with your friends!

1066
1.7k share, 1066 points

What's Your Reaction?

hate hate
0
hate
confused confused
0
confused
fail fail
0
fail
fun fun
1
fun
geeky geeky
1
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
1
win