1. Vì sao có Polling và Long Polling?
Trong các hệ thống yêu cầu stream data, việc cập nhật dữ liệu mới liên tục từ server đóng một vai trò quan trọng trong việc đảm bảo trải nghiệm người dùng tốt nhất. Tuy nhiên, điều này đặt ra một thách thức: làm thế nào để client có thể liên tục nhận được thông tin mới từ server mà không cần phải tạo ra các kết nối mới liên tục?
Dựa trên việc sử dụng các HTTP request để trao đổi dữ liệu giữa client và server, nhu cầu để nhận được cập nhật dữ liệu thời gian thực đã dẫn đến sự ra đời của các phương pháp như HTTP Polling và HTTP Long Polling.
2. HTTP Polling
Đây là một biến thể của HTTP Request nơi mà client liên tục gửi gửi request đến server trong một khoảng thời gian đều đặn nhất định.
- Client gửi request đến server
- Connection giữa client và server được thiết lập
- Server gửi phản hồi cho client (response có thể là rỗng nếu không có bất kỳ cập nhật nào)
- Connection được đóng
- Quá trình này được lặp lại trong khoảng thời gian đều đặn (ví dụ như 2s request 1 lần)
Nhược điểm của phương pháp này là mỗi lần client gửi yêu cầu đều tạo ra một kết nối mới với server. Điều này dẫn đến việc tiêu tốn nhiều băng thông mạng và tài nguyên server, đặc biệt khi phản hồi từ server thường là trống, không có cập nhật nào mới.
3. HTTP Long Polling
Đây là một biến thể của HTTP Polling nơi mà connection được giữ và client cần chờ đợi trong một thời gian dài đến khi máy chủ respond khi response đã sẵn sàng hoặc xảy ra timeout. Trong kịch bản này, response rất ít khi trống, và không có request không cần thiết nào được thực hiện.
- Client gửi request đến server
- Connection giữa client và server được thiết lập
- Connection vẫn mở trong một khoảng thời gian dài cho đến khi server có response để gửi hoặc khi timeout xảy ra
- Connection được đóng
- Quá trình này được lặp lại sau khi client nhận được response từ server hoặc timeout xảy ra
Mặc dù giải pháp này giảm thiểu sự lãng phí băng thông so với HTTP Polling, nhưng vẫn tốn tài nguyên và tăng độ trễ. Do mỗi kết nối đều phải được duy trì trong một khoảng thời gian dài để chờ đợi phản hồi từ máy chủ, điều này có thể tạo ra tải nặng cho máy chủ và tăng độ trễ cho người dùng. Không dễ dàng đảm bảo rằng dữ liệu được truyền từ máy chủ đến máy khách một cách nhất quán và theo thứ tự. Sự thiếu nhất quán này có thể dẫn đến việc dữ liệu bị ghi nhiều lần hoặc mất mát dữ liệu.
References: https://medium.com/@rano3003/demystifying-http-request-vs-http-polling-vs-long-polling-vs-websocket-vs-server-sent-event-vs-aa65d26d1e80
https://ably.com/topic/long-polling
https://anonystick.com/blog-developer/websocket-hay-noi-nhung-gi-ban-biet-ve-no-2021011447694405