Short Polling là một kỹ thuật giao tiếp client-server trong đó client gửi các yêu cầu HTTP theo khoảng thời gian cố định để nhận dữ liệu cập nhật. Máy chủ xử lý từng yêu cầu ngay lập tức, trả về trạng thái hiện tại ngay cả khi không có thay đổi. Theo Amazon Web Services, 2024, Short Polling là phương pháp polling đơn giản nhất để triển khai nhưng kém hiệu quả nhất, tạo ra tải quá mức lên máy chủ và mạng.
Những điểm chính
Short Polling là một mẫu giao tiếp trong đó client định kỳ gửi yêu cầu HTTP đến máy chủ với khoảng thời gian xác định trước, và máy chủ xử lý từng yêu cầu một cách đồng bộ và trả về kết quả ngay lập tức. Khoảng thời gian polling được đặt ở phía client bằng bộ đếm thời gian và thường từ 1 đến 60 giây tùy theo yêu cầu về độ tươi mới của dữ liệu.
Short Polling là cơ chế đầu tiên trong lịch sử để tổ chức giao tiếp thời gian thực trong các ứng dụng web. Vào đầu những năm 2000, trước thế hệ thứ hai của XMLHttpRequest, các trang web sử dụng <meta http-equiv="refresh"> hoặc tải lại iframe định kỳ để cập nhật nội dung. Với sự ra đời của công nghệ AJAX (Asynchronous JavaScript and XML) vào năm 2005, Short Polling đã trở thành phương pháp tiêu chuẩn để cập nhật dữ liệu mà không cần tải lại toàn bộ trang.
Kiến trúc Short Polling bao gồm ba thành phần: bộ đếm thời gian client, yêu cầu HTTP và trình xử lý máy chủ. Client khởi động một bộ đếm thời gian khoảng, và mỗi khi nó kích hoạt, một yêu cầu GET được gửi đến máy chủ. Máy chủ truy vấn cơ sở dữ liệu hoặc nguồn khác, tạo phản hồi và trả về ngay cho client. Client cập nhật giao diện và chờ lần kích hoạt tiếp theo của bộ đếm thời gian. Chu kỳ này lặp lại vô hạn khi ứng dụng đang hoạt động.
Vấn đề chính của Short Polling là các yêu cầu trống không thể tránh khỏi. Nếu dữ liệu thay đổi hiếm khi, hầu hết các yêu cầu trả về kết quả "không thay đổi", lãng phí băng thông mạng và thời gian CPU xử lý. Với 10.000 client có khoảng thời gian polling 5 giây, máy chủ nhận 2.000 yêu cầu mỗi giây — một phần đáng kể trong số đó là vô ích nếu tần suất cập nhật là 1 sự kiện mỗi phút.
Short Polling hoạt động theo một chu kỳ đơn giản: client đặt một bộ đếm thời gian khoảng với chu kỳ nhất định (ví dụ: 5000 ms). Mỗi lần bộ đếm thời gian kích hoạt, client tạo một yêu cầu HTTP GET đến endpoint máy chủ, thường có tham số dấu thời gian của lần cập nhật cuối cùng. Máy chủ nhận yêu cầu, kiểm tra dữ liệu mới sau dấu thời gian được chỉ định và trả về phản hồi — hoặc với dữ liệu mới hoặc với chỉ báo không có cập nhật.
Một tham số cấu hình quan trọng của Short Polling là khoảng thời gian polling. Khoảng thời gian quá ngắn (dưới 3 giây) tạo ra tải cao trên máy chủ và mạng. Khoảng thời gian quá dài (trên 30 giây) làm giảm độ tươi của dữ liệu. Khoảng thời gian tối ưu phụ thuộc vào kịch bản: cho bảng điều khiển giám sát — 5–15 giây, cho nguồn cấp tin tức — 30–60 giây, cho cảnh báo quan trọng — 1–3 giây. Việc chọn khoảng thời gian luôn là sự cân bằng giữa độ tươi của dữ liệu và tải hạ tầng.
Để giảm tải trong thời gian không hoạt động, khoảng thời gian thích ứng được sử dụng: nếu nhiều yêu cầu liên tiếp trả về kết quả trống, khoảng thời gian tăng lên (ví dụ: từ 5 lên 15 giây). Khi dữ liệu mới xuất hiện, khoảng thời gian được đặt lại về giá trị tối thiểu. Thuật toán backoff mũ (exponential backoff) có thể giảm số lượng yêu cầu trống đi 3–5 lần trong các bản cập nhật hiếm gặp.
Hãy xem xét triển khai Short Polling phía client sử dụng setInterval và Fetch API. Hàm nhận URL endpoint và khoảng thời gian polling tính bằng mili giây.
function startPolling(url, intervalMs) {
const lastTimestamp = new Date().toISOString();
const timerId = setInterval(async () => {
try {
const params = new URLSearchParams({
since: lastTimestamp
});
const response = await fetch(url + "?" + params);
const data = await response.json();
if (data.updates && data.updates.length > 0) {
renderUpdates(data.updates);
console.log("Đã nhận", data.updates.length, "updates");
}
} catch (error) {
console.error("Polling thất bại:", error);
}
}, intervalMs);
return timerId;
}
const timer = startPolling("/api/updates", 5000);
// clearInterval(timer) để dừng
Mã tạo khoảng thời gian polling 5 giây và truyền dấu thời gian của lần cập nhật cuối cùng cho máy chủ. Máy chủ có thể sử dụng tham số này để lọc dữ liệu và chỉ trả về các bản ghi mới, giảm lượng thông tin truyền đi. Hàm trả về định danh bộ đếm thời gian để có thể dừng polling.
Triển khai phía máy chủ cho Short Polling cực kỳ đơn giản — đó là một endpoint REST thông thường chấp nhận yêu cầu GET và trả về phản hồi JSON với trạng thái hiện tại hoặc dữ liệu đã thay đổi sau dấu thời gian được chỉ định.
const express = require("express");
const app = express();
let items = [];
app.get("/api/updates", (req, res) => {
const since = req.query.since;
const filtered = items.filter(item => item.timestamp > since);
res.json({ updates: filtered });
});
app.listen(3000);
Máy chủ nhận tham số since và lọc các bản ghi có dấu thời gian vượt quá giá trị được chỉ định. Cách tiếp cận này giảm thiểu lượng dữ liệu trong mỗi phản hồi, chỉ trả về các thay đổi gia tăng. Khi không có dữ liệu mới, máy chủ trả về một mảng trống và client tiếp tục polling theo lịch trình.
Short Polling và Long Polling giải quyết cùng một vấn đề — phân phối dữ liệu từ máy chủ đến client — nhưng khác biệt cơ bản về hiệu quả. Short Polling sử dụng khoảng thời gian yêu cầu cố định, tạo ra tải có thể dự đoán, trong khi Long Polling giữ kết nối mở cho đến khi sự kiện xảy ra, giảm thiểu số lượng phản hồi trống.
| Tiêu chí | Short Polling | Long Polling |
|---|---|---|
| Độ phức tạp triển khai | Thấp, REST tiêu chuẩn | Trung bình, xử lý bất đồng bộ |
| Độ trễ cập nhật | Cố định, lên đến N giây | Tối thiểu, khi sự kiện xảy ra |
| Số lượng yêu cầu | Không đổi, N yêu cầu mỗi phút | Theo sự kiện, thường ít hơn nhiều |
| Tải máy chủ | Cao với khoảng thời gian ngắn | Giữ kết nối, xử lý bất đồng bộ |
| Lưu lượng khi không hoạt động | Tối đa, mỗi yêu cầu với tiêu đề | Tối thiểu, một kết nối mở |
| Khả năng mở rộng | Đơn giản, yêu cầu không trạng thái | Phức tạp, yêu cầu hàng đợi sự kiện dùng chung |
Việc lựa chọn giữa các kỹ thuật phụ thuộc vào tần suất cập nhật của dữ liệu. Nếu sự kiện xảy ra thường xuyên hơn một lần mỗi 10 giây — cả hai cách tiếp cận đều tạo ra tải tương đương và Short Polling có thể đơn giản hơn. Nếu sự kiện hiếm (hàng giờ hoặc phút giữa các thay đổi) — Long Polling được ưu tiên hơn vì nó không tạo ra yêu cầu trống. Đối với các kịch bản trung gian, việc lựa chọn phụ thuộc vào các hạn chế về hạ tầng và khả năng sử dụng WebSocket.
Short Polling được sử dụng trong các kịch bản mà yêu cầu về độ tươi của dữ liệu thấp và sự đơn giản của triển khai được ưu tiên hơn hiệu quả. Các trường hợp điển hình nhất là bảng quản trị nội bộ, hệ thống giám sát với tần suất cảnh báo thấp và các ứng dụng nơi độ trễ 15–30 giây có thể chấp nhận được.
Hạn chế quan trọng — Short Polling không phù hợp cho các ứng dụng quan trọng về thời gian (terminal giao dịch, hệ thống cảnh báo khẩn cấp) nơi ngay cả độ trễ 1 giây cũng không thể chấp nhận. Trong các kịch bản như vậy, cần sử dụng WebSocket, Server-Sent Events hoặc Long Polling. Khi thiết kế hệ thống với Short Polling, cần tính toán ngân sách yêu cầu: với 1.000 client có khoảng thời gian 5 giây, máy chủ xử lý 12.000 yêu cầu mỗi phút, đòi hỏi cơ sở tài nguyên tương ứng.
Câu hỏi thường gặp
Short Polling là khi ứng dụng hỏi máy chủ mỗi N giây: "có dữ liệu mới không?", và máy chủ luôn trả lời, ngay cả khi không có gì thay đổi. Giống như đi đến hộp thư mỗi 5 phút để kiểm tra xem có thư mới không.
Khoảng thời gian Short Polling tối ưu phụ thuộc vào kịch bản: 5–10 giây cho bảng điều khiển giám sát, 15–30 giây cho nguồn cấp tin tức, 30–60 giây cho trang trạng thái. Khoảng thời gian nên là sự cân bằng giữa độ tươi của dữ liệu và tải máy chủ. Bắt đầu với 10 giây và điều chỉnh dựa trên kết quả kiểm thử.
Short Polling — client liên tục "hỏi" máy chủ với khoảng thời gian cố định. Long Polling — client thực hiện một yêu cầu và máy chủ giữ nó mở cho đến khi có dữ liệu. Short Polling đơn giản hơn để triển khai nhưng tạo ra nhiều yêu cầu trống hơn trong các bản cập nhật hiếm gặp.
Short Polling đơn giản hơn để triển khai so với WebSocket và không yêu cầu giao thức đặc biệt — nó hoạt động qua các yêu cầu HTTP thông thường. Short Polling phù hợp cho các hệ thống nội bộ đơn giản nơi độ trễ 10–30 giây có thể chấp nhận và chi phí hạ tầng để hỗ trợ WebSocket là không hợp lý.
Sử dụng khoảng thời gian thích ứng: khi không có cập nhật, tăng khoảng nghỉ giữa các yêu cầu lên 2–3 lần. Thêm tham số since với dấu thời gian của yêu cầu cuối cùng để máy chủ chỉ trả về các thay đổi gia tăng. Lưu cache các phản hồi ở phía CDN hoặc proxy để giảm tải backend.
Tổng kết
setInterval hoặc setTimeout đệ quy với khoảng thời gian cố định hoặc thích ứng.Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm