Node.js Websockets, khi kết hợp lại, là sự kết hợp của hai công nghệ phổ biến mà các nhà phát triển web có thể sử dụng để xây dựng ứng dụng web thời gian thực.
Ngoài ra, nếu bạn cần một nền tảng API có thể xử lý việc nhập khẩu tệp dưới nhiều hình thức khác nhau, hãy cân nhắc tải xuống Apidog! 👇 👇 👇
Rất quan trọng để hiểu rằng "Node.js WebSockets" đề cập đến hai công nghệ khác nhau được sử dụng phối hợp để tạo ra các ứng dụng web thời gian thực. Chúng không nên được coi là một thực thể duy nhất. Không cần phải dài dòng, hãy hiểu trước tiên Node.js và WebSockets là gì về bản chất.
Node.js là gì?
Node.js là một môi trường chạy JavaScript mã nguồn mở, đa nền tảng cho phép người dùng chạy mã JavaScript bên ngoài trình duyệt web. Do đó, Node.js không giới hạn các ứng dụng phần mềm và hệ thống khác nhau có thể sử dụng mã hóa JavaScript!

Các tính năng chính khiến Node.js hấp dẫn các nhà phát triển
- JavaScript ở mọi nơi: Với Node.js, bạn có thể sử dụng cùng một ngôn ngữ (JavaScript) cho cả phát triển phía trước (client-side) và phát triển phía sau (server-side), mang lại tính nhất quán và giảm thiểu chi phí chuyển đổi.
- Kiến trúc điều khiển sự kiện: Node.js xử lý nhiều yêu cầu đồng thời một cách hiệu quả mà không bị chặn, làm cho nó trở nên lý tưởng để xây dựng các ứng dụng thời gian thực và có thể mở rộng.
- Hệ sinh thái phong phú: Node.js được hưởng lợi từ một cộng đồng lớn và hoạt động tích cực, khi người dùng cung cấp hàng nghìn thư viện và framework có sẵn cho nhiều chức năng khác nhau. Bạn cũng có thể tìm thấy nhiều video trên YouTube để được hỗ trợ liên quan đến Node.js.
- Tính tương thích đa nền tảng: Node.js có thể chạy trên nhiều nền tảng khác nhau một cách liền mạch, như Windows, macOS, Linux và các hệ điều hành chính khác.
Khi nào bạn nên cân nhắc sử dụng Node.js cho các dự án của mình
Node.js chủ yếu được biết đến để xây dựng phần mềm ngoài các trang web truyền thống. Do đó, bạn có thể xem xét mạnh mẽ việc sử dụng Node.js trong một phần của phần mềm của mình nếu bạn có kế hoạch có những trường hợp sử dụng như vậy:
- Phát triển web: Node.js xuất sắc trong việc xây dựng các thành phần phía máy chủ cho các ứng dụng web, như APIs, tạo nội dung động, và các tính năng thời gian thực.
- Microservices: Node.js có thể giúp tạo ra các dịch vụ nhỏ, độc lập có thể dễ dàng triển khai và mở rộng.
- Công cụ dòng lệnh: Node.js có thể giúp bạn tự động hóa các tác vụ và tạo các tiện ích cho hệ thống.
- Internet of Things (IoT): Phát triển ứng dụng cho các thiết bị kết nối nhờ vào khả năng thời gian thực của nó.
- Dữ liệu streaming: Xử lý và phân tích các dòng dữ liệu một cách hiệu quả bằng cách sử dụng Node.js.
Lợi ích của việc sử dụng Node.js như một phần của phần mềm của bạn
- Dễ học: Nếu bạn đã biết JavaScript, việc học Node.js trở nên tương đối đơn giản.
- Cộng đồng lớn và tài nguyên: Node.js có nhiều thư viện, framework và hướng dẫn cung cấp hỗ trợ hữu ích và các phương pháp tốt nhất cho người dùng Node.js mới và hiện tại.
- Có thể mở rộng và linh hoạt: Node.js có thể thích ứng với nhiều loại ứng dụng khác nhau và mở rộng tốt với các cơ sở người dùng ngày càng tăng.
WebSockets là gì?
WebSockets là một giao thức truyền thông cho phép giao tiếp thời gian thực, hai chiều giữa một khách hàng (như một trình duyệt web) và một máy chủ. Chúng cũng cho phép cả khách hàng và máy chủ gửi và nhận tin nhắn đồng thời, cho phép một trải nghiệm tương tác và phản hồi hơn cho phần mềm.
Xin lưu ý rằng WebSockets là một giao thức, có nghĩa là chúng không thuộc về bất kỳ loại tệp nào. Tuy nhiên, bạn vẫn phải chú ý đến bảo mật WebSocket!
Các tính năng chính phân biệt WebSockets với các giao thức khác
- Giao tiếp hoàn toàn hai chiều: Với cả khách hàng và máy chủ gửi và nhận tin nhắn cùng một lúc, WebSockets có thể cung cấp giao tiếp liên tục, thời gian thực.
- Kết nối cố định: Thay vì mở và đóng các kết nối cho mỗi tin nhắn, WebSockets thiết lập một kết nối cố định giữa khách hàng và máy chủ. Điều này giảm chi phí overhead và cải thiện hiệu suất.
- Trao đổi dữ liệu thời gian thực: Dữ liệu được gửi và nhận ngay lập tức, tạo ra một trải nghiệm nhanh hơn và phản hồi hơn nhiều so với các yêu cầu HTTP truyền thống.
- Giảm tải của máy chủ: Với một kết nối cố định và giao tiếp dựa trên push, máy chủ không cần phải chờ các yêu cầu từ khách hàng, giảm tải công việc của chúng và cho phép chúng xử lý nhiều kết nối hơn.
Các lợi ích tiềm năng bạn có thể nhận được từ việc sử dụng WebSockets
- Tính linh hoạt: WebSockets có thể được sử dụng với nhiều ngôn ngữ lập trình và nền tảng như Python, JavaScript, Java, và nhiều hơn nữa. Điều này làm cho chúng đa năng và thích ứng với các môi trường và ứng dụng phát triển khác nhau.
- Độ trễ thấp hơn: Kết nối mở, cố định giảm thiểu độ trễ và đảm bảo rằng các tin nhắn được gửi đến gần như ngay lập tức. Điều này trở nên đặc biệt quan trọng cho các ứng dụng phụ thuộc vào kết nối liên tục, chẳng hạn như phát trực tiếp, chỉnh sửa hợp tác, và cập nhật dữ liệu tài chính thời gian thực.
- Hiệu quả và khả năng mở rộng: WebSockets thiết lập một kết nối cố định, giảm nhu cầu thiết lập và đóng kết nối lặp lại. Điều này dẫn đến tăng hiệu quả và cải thiện khả năng mở rộng, khiến WebSockets lý tưởng cho việc xử lý số lượng lớn kết nối đồng thời và trao đổi dữ liệu thời gian thực.
Cách kết hợp Node.js và WebSockets để tạo các ứng dụng web?
Dưới đây là hướng dẫn từng bước về cách xây dựng các ứng dụng web thời gian thực với Node.js và WebSockets!
- Chọn một thư viện:
Có một vài thư viện phổ biến mà bạn có thể chọn để giúp bạn triển khai WebSockets trong Node.js:
- ws: Một thư viện nhẹ với API dễ sử dụng. Lý tưởng cho các dự án đơn giản.
- socket.io: Cung cấp các tính năng bổ sung như phòng, không gian tên và phát sóng, làm cho nó tốt cho các ứng dụng phức tạp.
- express-ws: Một phần mở rộng cho framework Express, cung cấp tích hợp với các ứng dụng Express hiện có.
2. Thiết lập máy chủ Node.js của bạn:
Tạo một máy chủ Node.js sử dụng các mô-đun như http
hoặc express
. Máy chủ này sẽ lắng nghe các kết nối đến và xử lý định tuyến và các logic phía máy chủ khác.
3. Triển khai WebSocket:
- Sử dụng thư viện đã chọn của bạn để tạo một máy chủ WebSocket, chỉ định cổng để lắng nghe.
Trong bước này, bạn cũng nên định nghĩa các trình xử lý sự kiện cho các kịch bản khác nhau:
- Kết nối: Khi một khách hàng kết nối, WebSocket xử lý xác thực, ủy quyền và trao đổi dữ liệu ban đầu.
- Thông điệp: Khi một khách hàng gửi một thông điệp, xử lý nó, phát sóng đến các khách hàng khác (nếu cần), và gửi phản hồi nếu cần thiết.
- Ngắt kết nối: WebSockets có thể xử lý việc ngắt kết nối một cách tinh tế và dọn dẹp.
4. Tích hợp phía khách hàng:
Ở phía khách hàng (thường là trong một trình duyệt web), bạn có thể sử dụng các thư viện JavaScript như ws
hoặc socket.io-client
để kết nối đến máy chủ WebSocket của bạn.
- Thiết lập một kết nối và xử lý phản hồi từ máy chủ và các tin nhắn nhận được.
- Triển khai các trình xử lý sự kiện ở phía khách hàng để phản ứng với dữ liệu và cập nhật đến.
Mẫu mã của Node.js và WebSockets (Ví dụ về ứng dụng chat cơ bản)
Hầu hết các ứng dụng web mà bạn có thể tìm thấy ngày nay đều có các phần front-end và back-end tương ứng. Dưới đây là các mẫu của cả công nghệ Node.js và WebSockets hoạt động cùng nhau trong một mẫu ứng dụng chat đơn giản.
Máy chủ phía (Back-end) Mã [Node.js]
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', (ws) => {
console.log('Khách hàng đã kết nối');
ws.on('message', (message) => {
console.log(`Tin nhắn từ khách hàng: ${message}`);
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send(message);
}
});
});
ws.on('close', () => {
console.log('Khách hàng đã ngắt kết nối');
});
});
console.log('Máy chủ WebSocket đang lắng nghe trên cổng 8080');
Giải thích mã:
ws
: Nhập thư việnws
.- Biến
wss
Tạo một máy chủ WebSocket sử dụngWebSocket.Server
trên cổng 8080. - Sự kiện
connection
: Khi một khách hàng kết nối, ghi lại một tin nhắn và xác định các trình xử lý sự kiện chomessage
vàclose
. - Sự kiện
message
ghi lại tin nhắn nhận được, lặp qua tất cả khách hàng đã kết nối và gửi tin nhắn đến mỗi khách hàng đang mở. - Sự kiện
close
ghi lại một tin nhắn khi một khách hàng ngắt kết nối.
Mã phía khách hàng (Front-end) [Javascript]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebSocket Chat</title>
</head>
<body>
<input type="text" id="message" placeholder="Nhập tin nhắn của bạn..." />
<button id="send">Gửi</button>
<div id="messages"></div>
<script>
const ws = new WebSocket('ws://localhost:8080');
ws.onopen = () => {
console.log('Kết nối tới máy chủ');
};
ws.onmessage = (event) => {
const message = event.data;
console.log(`Nhận tin nhắn: ${message}`);
const messagesDiv = document.getElementById('messages');
messagesDiv.innerHTML += `<p>${message}</p>`;
};
const sendButton = document.getElementById('send');
sendButton.addEventListener('click', () => {
const messageInput = document.getElementById('message');
const message = messageInput.value;
ws.send(message);
messageInput.value = '';
});
</script>
</body>
</html>
Giải thích mã:
- Tạo một kết nối WebSocket đến máy chủ bằng cách sử dụng
ws
. - Sự kiện
open
ghi lại một tin nhắn khi kết nối được thiết lập. - Sự kiện
message
ghi lại tin nhắn nhận được và hiển thị nó trong phần tử HTML với IDmessages
. - Sự kiện nhấp vào nút
send
lấy tin nhắn từ trường nhập liệu, gửi nó đến máy chủ bằngws.send
, và xóa trường nhập liệu.
Xây dựng APIs với Node.js và WebSockets (Được hiển thị bằng các đoạn mã)
Bạn cũng có thể tạo ra các API riêng của mình để sử dụng trong ứng dụng web mà bạn đã tạo gần đây! (Xin lưu ý rằng mã code được cung cấp trong bài viết này chỉ dành cho mục đích minh họa.)
1. Thiết lập môi trường Node.js:
- Cài đặt Node.js và npm (Trình quản lý Gói Node)
- Tạo một thư mục dự án và khởi tạo nó:
npm init -y
2. Cài đặt các thư viện cần thiết:
Bạn sẽ cần cài đặt thư viện ws
cho WebSockets bằng cách chạy dòng mã này: npm install ws
. Bạn cũng sẽ phải cài đặt một framework web để định tuyến và xử lý yêu cầu HTTP, chẳng hạn như sử dụng Express qua dòng mã này: npm install express
.
3. Tạo máy chủ WebSocket (JavaScript):
const WebSocket = require('ws');
const express = require('express'); // Nếu sử dụng Express
const app = express(); // Nếu sử dụng Express
const wss = new WebSocket.Server({ port: 8080 });
// Xử lý yêu cầu HTTP (nếu sử dụng Express)
app.get('/', (req, res) => {
res.send('Xin chào, thế giới!');
});
// Xử lý kết nối WebSocket
wss.on('connection', (ws) => {
console.log('Khách hàng đã kết nối');
ws.on('message', (message) => {
console.log(`Tin nhắn nhận được: ${message}`);
// Xử lý tin nhắn và có thể gửi phản hồi
});
ws.on('close', () => {
console.log('Khách hàng đã ngắt kết nối');
});
});
// Bắt đầu máy chủ
app.listen(8080, () => {
console.log('Máy chủ đang lắng nghe trên cổng 8080');
});
Sau bước này, bạn có thể truy cập máy chủ WebSocket qua URL WebSocket, như ws://localhost:8080
.
4. Định nghĩa các điểm cuối API (JavaScript):
ws.on('message', (message) => {
const data = JSON.parse(message);
const action = data.action;
if (action === 'getData') {
ws.send(JSON.stringify({ data: 'Một số dữ liệu' }));
} else if (action === 'sendMessage') {
// Xử lý logic gửi tin nhắn
}
});
5. Tạo tương tác phía khách hàng (JavaScript):
const ws = new WebSocket('ws://localhost:8080');
ws.onopen = () => {
console.log('Kết nối tới máy chủ');
ws.send(JSON.stringify({ action: 'getData' }));
};
ws.onmessage = (event) => {
const response = JSON.parse(event.data);
console.log(response);
};
Apidog - Nền tảng thử nghiệm API lý tưởng
Một khi bạn đã tạo ứng dụng web Node.js WebSocket của mình, bạn sẽ cần thử nghiệm nó để đảm bảo rằng nó hoạt động như mong muốn.
Apidog là giải pháp tất cả trong một hoàn hảo cho tất cả các vấn đề API của bạn. Bạn không chỉ có thể thử nghiệm các điểm cuối duy nhất của một API, mà bạn còn có thể tạo một kịch bản thử nghiệm nhiều bước để đảm bảo rằng API của bạn sẵn sàng cho việc công bố!

Khi bạn đã có máy chủ WebSocket của mình hoạt động trên URL (như bài viết này sử dụng URL ws://localhost:8080
), chúng ta có thể bắt đầu tạo một yêu cầu WebSocket!
Tạo một yêu cầu WebSocket sử dụng Apidog

Đầu tiên, hãy tạo một yêu cầu API mới chỉ để thử nghiệm API hoặc ứng dụng WebSocket Node.js của bạn. Bạn cũng có thể sử dụng phím tắt Ctrl + T
để ngay lập tức tạo một yêu cầu mới.

Bạn sẽ thấy một yêu cầu trống, không có tên. Tại đây, bạn có thể tạo một URL API cụ thể, đặt phương thức HTTP mong muốn, và bao gồm các tham số truy vấn mà bạn dự định thử nghiệm API hoặc ứng dụng WebSocket Node.js của mình với.
Kết luận
Sự kết hợp của các công nghệ Node.js và WebSocket có thể cho phép các nhà phát triển tạo ra các ứng dụng thú vị và hữu ích. Chúng đặc biệt mạnh mẽ trong việc cho phép các chức năng như phòng chat thời gian thực và phát trực tiếp!
Apidog cũng có thể đáp ứng việc tạo ra và sửa đổi các yêu cầu WebSocket bất cứ khi nào cần thiết. Ngoài các yêu cầu, người dùng cũng có thể xây dựng, thử nghiệm, gỡ lỗi, và mô phỏng các API với Apidog.