Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
Vĩnh biệt Comet
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 mưu mẹo (nghĩa là không có chuẩn chung cho các browser, không dùng được cho tất cả browser) để 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ư long-polling Ajax, thì cái chủ động ở trên chỉ là có vẻ chủ động mà thôi, vì browser phải gửi request (browser có thể tái sử dụng connection có sẵn, không cần tạo connection mới) thì server mới được gửi data (nghĩa là một request chỉ có thể có một response, server không thể gửi vài response), có thể coi đây là một dạng half-duplex.
Gần đây, người ta đề ra giao thức mới gọi là WebSocket trên nền HTTP để giải quyết triệt để vấn đề trên. WebSocket là một phần của chuẩn HTML 5. Mùa xuân 2010, Chrome đã có tính năng WebSocket, Firefox 3.7 khi ra mắt cũng 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à cả web server. Tất nhiên cả ý tưởng làm web cũng cần bổ sung thói quen suy nghĩ theo một request - một 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.
- WebSocket: Push data realtime full duplex giữa server và browser.
Tham khảo




