Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Chat, thông báo tức thì, bảng điểm trực tiếp, cộng tác trên cùng tài liệu... đều cần dữ liệu đến người dùng ngay khi có thay đổi, thay vì họ phải tải lại trang. WebSocket là công nghệ chuẩn cho kiểu giao tiếp hai chiều này. Bài viết giúp bạn hiểu nó khác HTTP thế nào và khi nào dùng.
HTTP theo mô hình yêu cầu-phản hồi: client hỏi, server mới trả lời. Server không thể tự đẩy dữ liệu xuống. Để mô phỏng thời gian thực, người ta từng dùng polling: client hỏi lặp đi lặp lại mỗi vài giây. Cách này lãng phí (đa số lần hỏi không có gì mới) và có độ trễ.
WebSocket thiết lập một kết nối duy nhất, lâu dài và hai chiều giữa client và server. Nó bắt đầu bằng một yêu cầu HTTP "nâng cấp" (upgrade), sau đó giữ kết nối mở để hai bên gửi thông điệp cho nhau bất cứ lúc nào, với chi phí mỗi thông điệp rất nhỏ.
// Server Node.js với thư viện wsconst { WebSocketServer } = require('ws');const wss = new WebSocketServer({ port: 8080 });wss.on('connection', (socket) => { socket.on('message', (data) => { // phát lại cho mọi client đang kết nối for (const client of wss.clients) { if (client.readyState === 1) client.send(data.toString()); } });});// Client trong trình duyệtconst ws = new WebSocket('wss://example.com/chat');ws.onopen = () => ws.send('Xin chào mọi người');ws.onmessage = (e) => console.log('Nhận:', e.data);ws.onclose = () => console.log('Mất kết nối');Dùng wss:// (WebSocket bảo mật qua TLS) trong môi trường thật, tương tự HTTPS.
Nếu chỉ cần server đẩy thông báo, SSE thường đủ và đơn giản hơn WebSocket.
Hãy xem WebSocket là kênh phân phối, còn nguồn sự thật vẫn là API và database. Khi người dùng gửi tin nhắn, lưu vào database qua luồng bình thường rồi phát sự kiện cho những người liên quan. Nhờ vậy nếu kết nối rớt, client chỉ việc gọi API lấy lại những gì đã lỡ. Cách thiết kế này bền hơn nhiều so với việc coi kết nối là nơi lưu trạng thái.
Hãy xây một phòng chat nhỏ: server Node.js dùng thư viện ws, giao diện HTML thuần có ô nhập và danh sách tin nhắn. Sau đó thêm tên người dùng, lưu lịch sử vào database và gửi lại 20 tin gần nhất khi một người mới vào phòng. Tiếp theo thử tắt server giữa chừng và xem giao diện tự kết nối lại. Hãy luôn kiểm tra lại bằng thực hành thay vì chỉ đọc lý thuyết: dựng một dự án nhỏ, cố tình tạo lỗi, quan sát log và công cụ gỡ lỗi, rồi sửa.
Khi đã chạy tốt trên một server, hãy thử chạy hai bản và nối chúng bằng Redis Pub/Sub để thấy tin nhắn đi xuyên các tiến trình, đây là bước quan trọng nhất để chuyển từ bản thử sang hệ thống thật.
WebSocket mở ra trải nghiệm thời gian thực, nhưng đi kèm bài toán về xác thực, mở rộng và độ bền kết nối. Hãy bắt đầu bằng một ví dụ phòng chat nhỏ, sau đó thử mở hai tab trình duyệt để thấy tin nhắn xuất hiện tức thì. Khi cần thật sự, cân nhắc giữa WebSocket, SSE hoặc dịch vụ quản lý tùy yêu cầu.
Muốn học bài bản và có lộ trình rõ ràng? Bạn có thể xem các khóa học trên codebem.com.
Nguyễn Đình Cường
0 comment