2010-06-04 35 views
8

Tôi cần tạo một cuộc trò chuyện như trò chuyện trên facebook.Comet VS Ajax polling

Với Sao chổi, tôi cần thêm bộ nhớ để giữ kết nối.

Khi bỏ phiếu Ajax có vấn đề về độ trễ nếu tôi gửi yêu cầu sau mỗi 3-4 giây.

Vì vậy ... Nếu độ trễ (3-4 giây) không quan trọng, Ajax là bỏ phiếu tốt hơn cho trường hợp của tôi?

+1

Tôi nghĩ bạn vừa trả lời câu hỏi của riêng mình ở đó :) –

Trả lời

1

Nếu độ trễ không phải là vấn đề thì AJAX có thể tốt hơn. Sao chổi có thể gặp phải vấn đề duy trì nhiều kết nối giữa cùng một cặp máy khách/máy chủ nếu bạn không phải là rất, rất cẩn thận. (Ref)

6

Độ trễ không phải là vấn đề duy nhất. COMET (bỏ phiếu dài) "tiết kiệm" lưu lượng truy cập của bạn - khi bạn sử dụng bỏ phiếu, bạn không thể biết, nếu có thay đổi trên máy chủ, vì vậy một số cuộc gọi có thể chỉ là lãng phí lưu lượng truy cập và tài nguyên (ví dụ, ngay cả khi không có ai trò chuyện, bạn thực hiện cuộc gọi mỗi 3-4 giây). Trong trường hợp của COMET, bạn thường cần một cuộc gọi chỉ để nhận được bản cập nhật từ máy chủ (với tỷ lệ lần truy cập 100%).

+2

nhưng với Comet, tôi cần thêm bộ nhớ để tiếp tục mở kết nối ... không? – xRobot

+1

Việc giữ kết nối không phải là quá độc hại. Mức tiêu thụ bộ nhớ phụ thuộc vào IO API phía máy chủ mà bạn sẽ cho phép - chặn hoặc không chặn. Nếu bạn chọn API chặn, bạn sẽ có một chuỗi cho mỗi kết nối -> các vấn đề về bộ nhớ với 3-4k kết nối mở. Nếu bạn chọn API không chặn (hầu như mọi máy chủ ứng dụng đều có khả năng NIO), bạn có thể giữ hàng triệu kết nối đã mở. –

+1

Bạn có thể thấy điều này thú vị - http://iobound.com/2008/11/comet-nio/ –

2

@Vasil: "bạn có thể giữ hàng triệu kết nối mở"

Hãy xem to this problem

Và về the false superiority của nio trên IO.

Bài viết iobound chỉ cho thấy IO hoạt động tốt hơn NIO và có IO hết bộ nhớ trước NIO (nhân tiện, tác giả đã không cố gắng giảm bộ nhớ ngăn xếp với giá trị thấp hơn).