Vĩnh biệt Comet
White

Ngoc Dao viết ngày 21/03/2016

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

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Ngoc Dao

102 bài viết.
284 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
62 8
Làm thế nào để nâng cấp trang web mà không làm gián đoạn dịch vụ? Đây là câu hỏi phỏng vấn các công ty lớn thường hỏi khi bạn xin vào vị trí làm lậ...
Ngoc Dao viết hơn 2 năm trước
62 8
White
40 1
Bài viết này giải thích sự khác khác nhau giữa hai ngành khoa học máy tính (computer science) và kĩ thuật phần mềm (software engineering), hi vọng ...
Ngoc Dao viết hơn 2 năm trước
40 1
White
34 1
Nếu là team leader, giám đốc công ty hay tướng chỉ huy quân đội, vấn đề cơ bản bạn gặp phải là “hướng mọi người đi theo con đường bạn chỉ ra”. Thử...
Ngoc Dao viết hơn 2 năm trước
34 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
102 bài viết.
284 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!