Điều này post là giải thích tốt hơn, thảo luận về sự khác biệt/lợi thế/v.v. về Giới thiệu dài, Sao chổi, SSE và WebSockets.
Đối với hầu hết các phần, khách hàng thường phải thực hiện yêu cầu đầu tiên đến máy chủ để thiết lập kết nối. Khi kết nối được thiết lập, máy chủ có thể đẩy dữ liệu đến máy khách. Vì vậy, ngay cả với WebSockets, khách hàng sẽ thực hiện yêu cầu ban đầu cho máy chủ để thiết lập kết nối đáng tin cậy giữa hai người.
Sự kiện được máy chủ gửi sử dụng yêu cầu HTTP GET bình thường để thiết lập kết nối với máy chủ. Nó cũng là một kết nối chỉ đọc cho khách hàng. Nó có lợi ích của việc thực hiện dễ dàng vì chúng ta không phải định nghĩa một giao thức mới. Vấn đề là các kết nối HTTP, ngay cả khi kết nối liên tục, được đóng lại sau khoảng 15 giây bởi hầu hết các máy chủ web. Ngay cả đối với các yêu cầu lâu dài, máy chủ web thường có thời gian chờ sau khi nó đóng kết nối. Đây là nơi mà ý tưởng của cuộc thăm dò ý kiến dài đến. Đó là một ý tưởng đơn giản mà chúng tôi thực hiện một yêu cầu ajax bình thường cho máy chủ và máy chủ để nó mở càng lâu càng tốt. Nếu yêu cầu được đóng bởi máy chủ vì bất kỳ lý do gì, bạn ngay lập tức thực hiện lại yêu cầu đó. Bạn có thể thực hiện một cơ chế bỏ phiếu dài (ví dụ Comet) khá dễ dàng với một máy chủ như Node.js và một yêu cầu Ajax bình thường từ trình duyệt. Sự kiện được máy chủ gửi cố gắng trừu tượng hóa việc triển khai bên trình duyệt này với EventSource. Vì vậy, thay vì bạn phải triển khai mã phía trình duyệt/phía máy khách để bỏ phiếu/sao chổi dài, trình duyệt sẽ xử lý điều này cho bạn. Nó cung cấp một trừu tượng tốt đẹp của những gì có vẻ như một kết nối liên tục. Máy chủ web của bạn chỉ cần tìm kiếm các yêu cầu GET chỉ định Content-Type, trong tiêu đề, dưới dạng "văn bản/sự kiện-luồng" và để kết nối HTTP mở càng lâu càng tốt.
Tôi khuyên bạn không nên quá phức tạp sự kiện Máy chủ được gửi là gì. Nếu bạn hiểu một yêu cầu HTTP GET bình thường, thì có thể bạn đã có 90% hiểu ý tưởng đằng sau nó.
Có một sự khác biệt giữa SSE/Sao chổi và cuộc thăm dò dài truyền thống có thể đáng để làm nổi bật. Theo kinh nghiệm của tôi, ý tưởng đằng sau việc bỏ phiếu dài là yêu cầu của bạn không trở lại cho đến khi bạn có bản cập nhật. Tại thời điểm đó, kết nối HTTP bị đóng và một yêu cầu khác được thực hiện ngay sau đó. Với SSE, mặc dù bạn có thể đóng kết nối HTTP ngay sau khi bạn gửi thông báo được cập nhật, mục tiêu của bạn là xóa dữ liệu từ máy chủ đến máy khách mà không thực sự đóng/kết thúc yêu cầu HTTP. Điều này tránh được chi phí thực sự yêu cầu GET. Điều này có thể đạt được với một yêu cầu ajax thường xuyên, nhưng một lần nữa SSE cung cấp một triển khai tốt đẹp/hiệu quả với EventSource.
Chỉnh sửa: làm rõ sự khác biệt giữa SSE và bỏ phiếu dài.
Nguồn
2012-05-30 22:21:29