2010-10-01 40 views
14

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ụ.

+0

Đ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

+0

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

+0

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

Trả lời

8

dài bỏ phiếu sẽ mở rộng quy mô tốt hơn (tức là ít hơn tải máy chủ) so với bỏ phiếu, trong khi đem lại tốt hơn nhiều Thời gian đáp ứng.

Nếu cuộc thăm dò ý kiến ​​của người nhận, thời gian đi lại trung bình của tin nhắn sẽ bằng một nửa khoảng thời gian thăm dò ý kiến ​​của bạn.

Với tính năng bỏ phiếu dài, ngay lập tức - máy chủ chỉ đợi nếu không có gì để nói.

Nếu bạn đang thực hiện nhắn tin trò chuyện, hãy đi thăm dò ý kiến ​​dài; một điều khả dụng của nó.

Phía xuống với việc bỏ phiếu dài là việc triển khai thực hiện phức tạp hơn; nhưng nó không phức tạp hơn nhiều và được triển khai rộng rãi. Vì vậy, nếu bạn không thể sử dụng một khung-off-the-shelf cho máy chủ web của bạn lựa chọn, bạn có thể thiết lập về viết một cách hợp lý và bạn sẽ làm cho nó hoạt động.

+1

Đồng ý.Nhưng với một tá khách hàng tất cả đều nhấn vào hệ thống, đó là một tá các tiến trình php đang hoạt động 100% thời gian. Theo như khả năng mở rộng có liên quan, tôi đoán đó không phải là tồi tệ hơn nhiều so với một nửa so với nó mỗi giây. – Derek

+0

Hãy chắc chắn rằng các quy trình này đang ngủ độc đáo, không phải trong một số cuộc thăm dò ý kiến ​​của riêng chúng, và tất cả sẽ tốt đẹp và mượt mà. Lo lắng khi bạn có vài trăm hoặc nhiều khách hàng hơn. – Will

2

Bạn cũng có thể nhìn vào websockets, một phần của các trình duyệt mới nhất (hoặc mô phỏng qua một Flash file bạn thả trên trang của bạn)

+0

Thật không may, tôi cần để có thể hỗ trợ các trình duyệt hiện tại và có thể là kế thừa. Chắc chắn giá trị một số nghiên cứu nhiều hơn mặc dù. Cảm ơn! – Derek

+1

Đó là những gì bộ điều hợp flash thực hiện – Will

Các vấn đề liên quan