Article:
Vĩnh biệt Comet
1087
ngocdaothanh.myopenid.com 175Updated over 2 years ago |
Ban đầu web được thiết kế chỉ để cho browser làm chủ động. Nghĩa là thiết kế theo mô hình pull, browser có việc gì thì nó sẽ tạo connection đến server, browser xong việc thì connection sẽ bị cắt. Sau này web được bổ sung tính năng keep alive, nhưng cũng để chỉ giữ/tái sử dụng connection (lẽ tự nhiên nguồn gốc của connection là do browser tạo ra, chứ server không thể tự tiện tạo kết nối đến browser) để nếu browser lại có việc ngay thì có thể request tiếp phát nữa trên cùng connection, còn server không có cách chi chủ động gửi data cho browser nếu browser không request.
Để khắc phục, người ta phải nghĩ ra rất nhiều cách để server có thể chủ động push data cho browser sau khi có connection, gọi chung là Comet. Nếu không dùng plugin đặc biệt cho browser như Flash mà chỉ dùng những cách như Ajax và long-poll Ajax, thì cái chủ động ở trên chỉ là có vẻ chủ động mà thôi, vì browser phải request thì server mới được gửi data, một dạng half-duplex.
Gần đây, người ta đề ra giao thức mới gọi là Web Sockets trên nền HTTP cách giải quyết triệt để vấn đề trên. Web Sockets là một phần của chuẩn HTML 5. Hiện (19/3/2010) Chrome đã có, Firefox 3.7 sắp ra cũng sẽ có tính năng này.
Client side là vậy, để tận dụng web sockets server side cũng phải thay đổi cả chương trình và web server. Tất nhiên cả ý tưởng làm web cũng cần bổ sung thói quen suy nghĩ theo request-response bấy lâu nay để thêm cái dựa trên realtime full-duplex. Cũng có thể đồ chơi mới này sẽ làm thay đổi màu sắc của sân chơi công nghệ, màu đỏ-trắng của Erlang màu đỏ-đen của Scala sẽ rõ ràng hơn chẳng hạn...
Như vậy thế giới sắp được vĩnh biệt Comet. Ajax tất nhiên vẫn ổn vì Ajax và Web Sockets dùng cho 2 mục đích khác nhau, bổ sung cho nhau:
- Ajax: cho phép chương trình JavaScript trên browser gửi request lên server mà không làm reload trang web.
- Web Sockets: push data realtime full duplex giữa server và browser.
175
