2015-06-24 15 views
12

Tôi có PHP ở phía máy chủ và HTML và javascript ở phía máy khách.Thông báo đẩy | websocket có bắt buộc không?

Tôi đang tạo ứng dụng trong đó một bên liên quan nhập một thông báo được phát tới nhiều người nhận của một nhóm trong thời gian thực.

Tôi đã thực hiện một số nghiên cứu trên google và tôi hiểu rằng tôi cần phải sử dụng WebSockets hoặc Comet cho thông báo đẩy thời gian thực. WebSocket hoặc Comet có bắt buộc gửi thông báo hàng loạt cho người dùng không?

Sự hiểu biết của tôi có đúng không? Bất kỳ tài liệu tham khảo để bắt đầu với?

Trả lời

25

Nếu khách hàng là trình duyệt, thì hai cách duy nhất mà trình duyệt chuẩn có thể kết nối với máy chủ là qua yêu cầu Ajax (ví dụ: http) hoặc kết nối webSocket. Vì vậy, nếu bạn muốn một khách hàng để nhận được thông báo về một cái gì đó từ thế giới bên ngoài, nó phải sử dụng một trong hai cơ chế đó.

Yêu cầu HTTP tạm thời. Máy khách thực hiện yêu cầu của máy chủ, máy chủ phản hồi. Yêu cầu HTTP là hoàn hảo cho khách hàng yêu cầu thông tin từ máy chủ. Họ không phải là rất tốt tại máy chủ gửi thông tin cho khách hàng bởi vì thông thường khách hàng không được kết nối. Có nhiều hacks và work-around nơi client "thăm dò" máy chủ trong một khoảng thời gian và thậm chí máy chủ còn sử dụng các yêu cầu chạy lâu hơn để thử mô phỏng hệ thống kiểu "push", nhưng chúng là các hacks tối ưu phụ ở mức tốt nhất.

ổ cắm web là các kết nối liên tục. Máy khách kết nối và kết nối vẫn được duy trì miễn là cả hai bên đều muốn. Điều này cho phép một trong hai bên khả năng gửi tin nhắn đến phía bên kia bất cứ khi nào họ muốn. Điều đó có nghĩa là máy chủ có thể "đẩy" dữ liệu cho khách hàng bất cứ khi nào nó muốn. webSockets là hiệu quả cho các kết nối đẩy và được khuyến khích (đây là một trong những điều chính chúng được thiết kế cho).

Comet là thư viện ban đầu được xây dựng để sử dụng HTTP để cố gắng "hack" hoặc "mô phỏng" đẩy trước khi webSockets được phát minh và sau đó trước khi chúng được hỗ trợ rộng rãi. Tôi có thể nghĩ không có lý do tại sao người ta muốn sử dụng Comet thay vì một webSocket trừ khi bạn đã có một trình duyệt cũ mà webSocket không được hỗ trợ. Vì vậy, nếu bạn đang cố gắng "đẩy máy chủ thời gian thực" vào trình duyệt, thì bạn phải có một ổ cắm được kết nối liên tục từ máy khách có nghĩa là webSocket (hoặc thứ gì đó được xây dựng trên đầu trang webSocket như socket.io).

Đối với các ứng dụng điện thoại nơi bạn có quyền truy cập vào SDK điện thoại, bạn có thể sử dụng hệ thống "đẩy" được tích hợp vào hệ điều hành để đẩy một số tin nhắn từ máy chủ đến máy khách. Điều này không hoàn toàn giống với kênh webSocket hai chiều, nhưng vì bạn đã hỏi về "thông báo đẩy", các dịch vụ đẩy hệ điều hành có sẵn trong cả Android và iOS cũng có thể là tùy chọn để đẩy thông báo từ máy chủ đến máy khách. Dưới đây là thông tin về iOS notificationsGoogle Cloud Messaging

Tính đến năm 2016, người ta cũng có thể sử dụng Server-sent events trong tất cả các trình duyệt hiện đại, ngoại trừ các trình duyệt của Microsoft (chưa được hỗ trợ trong Edge hoặc IE) để đẩy dữ liệu từ máy chủ cho khách hàng. Đây là browser compatibility table. Sự kiện được gửi bằng máy chủ sử dụng kết nối HTTP lâu dài, loại MIME đặc biệt và ứng dụng hỗ trợ để có thể gửi sự kiện từ máy chủ đến máy khách bất cứ lúc nào. Không giống như webSockets, các sự kiện được gửi bằng máy chủ chỉ là một cách (từ máy chủ đến máy khách). Một khách hàng sau đó sẽ sử dụng một cuộc gọi Ajax truyền thống để có thể gửi dữ liệu đến một máy chủ (trong khi với một dữ liệu webSocket có thể được gửi một trong hai cách trên cùng một kết nối webSocket).

Dưới đây là mô tả đúng về cách các sự kiện do máy chủ gửi hoạt động: How do server-sent events actually work?

+0

Bạn có ý gì với hệ thống đẩy trong ứng dụng điện thoại? Thông báo đẩy? Điều này hoạt động khác với websockets ... – Ixx

+0

@Ixx - Cả Android và iOS đều có dịch vụ đẩy được tích hợp vào hệ điều hành. Dưới đây là thông tin về [thông báo iOS] (https://developer.apple.com/notifications/) và [Google Cloud Messaging] (https://developers.google.com/cloud-messaging/). Đây rõ ràng không giống như webSockets (cũng không phải là chúng được dự định), nhưng nếu bạn chỉ muốn gửi cập nhật không thường xuyên từ máy chủ đến điện thoại di động, đây có thể là cách hiệu quả nhất để làm như vậy. – jfriend00

+0

Có Tôi nhận thức rõ rằng điều này không thể được sử dụng cho các ổ cắm web vì nó dường như được đề xuất. – Ixx

Các vấn đề liên quan