2009-05-03 28 views
7

Có thể để máy chủ web gửi tin nhắn đến trình duyệt web không có Comet?Đảo ngược Ajax không có Comet?

Mỗi công ty web lớn như Facebook và Google đều sử dụng Comet cho mục đích này và có vẻ như một hack xấu xí đang chờ biến mất nếu kết nối tcp được bật cho các trình duyệt chính.

Trả lời

5

Có thể để máy chủ web gửi thư đến trình duyệt web mà không có Comet?

Có, có thể thông qua Silverlight, Flex, Flash và Java Applets.

Mỗi công ty web lớn như Facebook và Google sử dụng cho mục đích này Comet và nó chỉ có vẻ như một hack xấu xí chờ đợi để biến mất nếu tcp kết nối đã được bật cho trình duyệt chính.

Kết nối TCP a la HTML 5 Web Sockets sẽ không khắc phục được sự cố. Bạn thấy rất nhiều người sử dụng Google và Facebook từ nơi làm việc, trường đại học hoặc trường học và tường lửa của họ thường chặn các cổng không chuẩn và lưu lượng truy cập không phải HTTP. Vì vậy, một giải pháp gửi tin nhắn đến một trình duyệt web phải làm việc qua HTTP và thường trông giống như HTTP. Đó là lý do tại sao Google và Facebook sử dụng Comet và sẽ tiếp tục làm như vậy nếu không họ sẽ không thể tiếp cận một tỷ lệ lớn người dùng của họ. Trong thực tế, một số tường lửa và proxy ngược lại sẽ đóng các kết nối HTTP chạy dài và do đó kết nối bỏ phiếu Ajax thường được sử dụng như một dự phòng. Tôi có thể đề xuất một cái gì đó như StreamHub Reverse Ajax nếu bạn đang tìm kiếm một máy chủ có khả năng gửi tin nhắn đến trình duyệt thông qua Reverse Ajax.

+1

Xem: http://stackoverflow.com/questions/1227266/how-do-i-open-a-connection-back-to-the-server-using-flex – DLauer

+0

Và http://stackoverflow.com/ câu hỏi/1225147/how-do-i-open-a-tcp-socket-từ-silverlight – DLauer

2

Tại sao bạn nghĩ rằng Facebook và Google sẽ làm điều đó nếu có cách khác?

Vâng, OK, có nhiều cách khác. Bạn có thể nhúng một applet Java vào trang. Nếu applet Java được ký, và người dùng cho phép nó, nó có thể mở ra một kết nối dài để máy chủ gửi các sự kiện. Nhưng điều đó sẽ giúp bạn có được thứ gì đó mỏng manh hơn, đòi hỏi nhiều tương tác người dùng hơn, chậm hơn để khởi động và sẽ hoạt động trên ít nền tảng hơn Comet.

Đã có một số thảo luận về việc thêm server-sent eventsweb sockets vào HTML5, nhưng điều đó cực kỳ sơ bộ và có thể sẽ không biến nó thành tiêu chuẩn.

2

Khi "Sao chổi" là thuật ngữ nhân tạo cho bất kỳ thứ gì sử dụng giao thức http hiện có để mô phỏng việc đẩy dữ liệu, tôi sợ bạn không thể làm gì cả.

Giải pháp duy nhất sẽ là "nâng cao" của giao thức hiện tại hoặc một số giải pháp dựa trên plugin có thể được sử dụng rộng rãi ... bạn có thể sử dụng java cho điều đó. Nhưng điều này sẽ làm tăng các vấn đề khác bởi vì về cơ bản bạn cần có kết nối đến trên trình duyệt đó.

2

Sao chổi có thể được triển khai như một cuộc gọi ajax bỏ phiếu dài, do đó, nó trở thành vấn đề ngữ nghĩa. Here, for example, is a jquery plugin thực hiện Comet bằng giao thức Bayeux trên đầu cuộc gọi ajax của jQuery.