Tôi đang xây dựng một thành phần của một trang web cần kiểm tra cơ sở dữ liệu tương đối liên tục. Tôi có thể thấy hai cách tiếp cận khác nhau cho điều này, và tôi tự hỏi nếu một trong số họ là tốt hơn so với những người khác, hoặc nếu tôi đang thiếu một lựa chọn thứ ba.Tần suất bỏ phiếu AJAX - Để thăm dò ý kiến lâu dài hoặc không thăm dò ý kiến lâu dài?
1) Gửi yêu cầu AJAX mỗi 1 hoặc 2 giây để kiểm tra các bản cập nhật. Mỗi yêu cầu trả về ngay lập tức liệu có dữ liệu mới hay không.
2) Tắt một yêu cầu AJAX duy nhất sẽ không trả lại cho đến khi nhận được dữ liệu hoặc hết thời gian chờ. Khi một trong những điều đó xảy ra, nó sẽ kích hoạt yêu cầu tiếp theo. (Tôi nghĩ điều này được gọi là bỏ phiếu dài?)
Số lượng truy vấn cơ sở dữ liệu sẽ giống nhau, nhưng với # 2 sẽ có ít yêu cầu hơn từ trình duyệt có thể tiết kiệm băng thông và tài nguyên khách hàng. Đối với máy chủ, tốt hơn là nên có một yêu cầu PHP duy nhất duy trì trạng thái hoạt động và ngủ giữa các truy vấn hoặc kích hoạt sau mỗi vài giây, cuộc thăm dò ý kiến của DB, sau đó tắt? Hoặc là không có sự khác biệt và tôi đang nhấn mạnh về điều này quá nhiều?
CHỈNH SỬA: Tôi cho rằng tôi cũng nên nói rằng đây là tiện ích trò chuyện của một ứng dụng web lớn hơn. Một chút chậm trễ trong giao tiếp sẽ không giết người dùng, vì trò chuyện là một tính năng phụ.
Điều này thực sự phụ thuộc vào thời gian của cuộc thăm dò dài và số lượng khách hàng bạn kết nối. Nếu bạn có 2 hoặc 3, cuộc thăm dò ý kiến dài có thể hoạt động tốt hơn (vì các bản cập nhật sẽ ngay lập tức). Nếu bạn có rất nhiều, cuộc thăm dò dài sẽ rất tốn kém vì mỗi kết nối đòi hỏi một quá trình PHP (vì nó là PHP đang giữ nó mở). Vì vậy, trong trường hợp đó, tôi sẽ sử dụng một khoảng thời gian bỏ phiếu "thông minh". Về cơ bản, nếu thời gian trung bình để cập nhật là 10 giây, thăm dò ý kiến tại 5, sau đó 8, sau đó 10, sau đó 11, v.v ...). Về cơ bản chỉ cần cắt giảm thời gian một nửa. Nó dễ dàng hơn trên máy chủ (kể từ khi tải trung bình giảm), nhưng nhanh chóng ... – ircmaxell
Tôi cho rằng tôi cũng nên nói rằng đây là một tiện ích trò chuyện của một ứng dụng web lớn hơn. Một chút chậm trễ trong giao tiếp sẽ không giết người dùng, vì trò chuyện là một tính năng phụ. Nhưng chúng tôi muốn nó là hợp lý (trong vòng 2 giây?) – Derek
Thành thật mà nói, tôi sẽ không làm điều này trong PHP. Nhận một ngôn ngữ khác và triển khai hệ thống xếp hàng và sử dụng kết nối TCP liên tục để nói qua lại ... Hoặc, tại sao không cài đặt Jabber và thực hiện (và có thể triển khai giao diện JS cho máy chủ) ... – ircmaxell