trước khi bắt đầu tạo 1 server nodejs chúng ta xem lý thuyết sự khác biệt của mô hình web truyền thống thread và runtime
máy chủ web truyền thống
Trong mô hình máy chủ web truyền thống, 1 request đc gửi lên server thì server sẽ tạo ra 1 thread ( tạm dịch là luồng ). luồng của request A sẽ khác với luồng của request B. Mô hình web truyền thống là thread rất bất tiện trong việc xử lý IO.
Bàn kĩ hơn, JAVA - server truyền thống của java là Apache Web Server. Mỗi khi có một request mới đến, có một connection mới thì server sẽ tạo 1 thread mới và đưa connection mới đó cho thread đó handle. ( tạm hiểu cùi cùi là vậy ). và khi khởi tạo 1 thread thì nó vừa tốn thời gian vừa tốn bộ nhớ. Trong Java thì 1 thread chiếm khoảng 1MB, nghĩa là thread chưa làm gì hết, mới được khởi tạo ra thôi thì nó đã chiếm 1MB bên trong RAM.
=> VPS bạn có 1G RAM chưa nói gì đến database hay cái quần què gì khác chỉ chạy Java và only java 😄 thì 1GB = 1024 MB. máy chủ chỉ xử lý đc tầm 1024 request cùng lúc. THÔI CÃI LÀ TUI TÍNH SAI ĐI VÌ TÔI BIẾT TÔI SAI MÀ 😄 ( kỹ hơn thì bạn hiểu web server truyền thống sẽ tạo thread pool chứa 1 nùi thread sẵn sẵn để hạn chế việc khởi tạo rồi xóa đi mất thời gian và mất cả chi phí RAM. nhưng đâu đó cũng chỉ handle đc số thread bằng gấp rưỡi số CPU core. vượt qua số đó Server rơi vào trạng thái ngủ đông. hay còn gọi là sập 😄
Mô hình quy trình Node.js
Node.js xử lý các yêu cầu của người dùng khác nhau khi so sánh với mô hình máy chủ web truyền thống. Node.js chạy trong một quy trình duy nhất và mã ứng dụng chạy trong một luồng và do đó cần ít tài nguyên hơn các nền tảng khác.
Nodejs chạy nhanh?
Đây là một kết luận rất nhiều lập trình viên Nodejs mặc định cho là đúng. Trước hết, “nhanh” là một khái niệm mang tính so sánh nên phải so với ai đã. so với PHP nha, hay java hay C# ? 😄
nhìn vào biểu đồ ta có nhận xét PHP như lol 😄 Nodejs có hiệu năng tỏ ra tương đối vượt trội so với các nền tảng sử dụng interpreter khác ( như PHP, Ruby, Python…) tuy nhiên thua kém so với các ngôn ngữ được biên soạn (Go, C#, Java).
hoạt động nodejs
Tất cả các yêu cầu của người dùng đối với ứng dụng web của bạn sẽ được xử lý bởi một luồng duy nhất theo hình dưới đây
Mô hình quy trình Node.js làm tăng hiệu suất và khả năng mở rộng. Node.js không phù hợp với một ứng dụng thực hiện các hoạt động đòi hỏi nhiều CPU như xử lý hình ảnh hoặc công việc tính toán nặng nề khác vì phải mất thời gian để xử lý yêu cầu và do đó chặn đơn luồng
Ứng dụng đầu tiên với Node.js
tạo file index.js. sau đó patse nội dung sau vào file đó.
// nội dung file index.js
const http = require('http')
const port = 3000
const requestHandler = (request, response) => {
response.end('Hello Hùng đẹp trai, đây là Node.js Server!')
}
const server = http.createServer(requestHandler)
server.listen(port, (err) => {
if (err) {
return console.log('Something went wrong', err)
}
console.log(`server is listening on ${port}`)
})
run nodejs lên bằng cách cd đến thư mục đã tạo file index.js gõ lệnh:
Sau đó mở trình duyệt lên và truy cập vào localhost:3000 và kết quả trên màn hình sẽ hiện ra dòng chữ:
Hello Hùng đẹp trai, đây là Node.js Server!
Vấn đề không ai code tay code chay cả. Bài sau chúng ta tìm hiểu cách Tạo 1 app nodejs đầu tiên sử dụng Express application generator