2012-02-04 30 views
8

Tôi đang tạo một ứng dụng web yêu cầu hệ thống thông báo trực tiếp. Làm thế nào tôi sẽ thiết lập máy chủ của tôi để lấy dữ liệu từ một cơ sở dữ liệu mySQL và sau đó đẩy nó vào trình duyệt. Tôi hoàn toàn có NO ý tưởng cách thực hiện việc này. Nếu bất cứ ai có thể giúp đỡ, nó sẽ được nhiều đánh giá cao! Cảm ơn bạn rất nhiều!PHP - AJAX Máy chủ jQuery "Đẩy" Hệ thống

EDIT: Tôi có lẽ nên cụ thể hơn, tôi đang kéo dữ liệu như trong XYZ gần đây đã tạo một tài khoản, XZY gần đây ... Cảm ơn rất nhiều!

Trả lời

13

Bạn không thể đẩy dữ liệu vào trình duyệt, nhưng những gì bạn có thể làm là thiết lập trang web của bạn để thăm dò ý kiến ​​máy chủ vài giây một lần để cập nhật. Một thiết lập mẫu sẽ là:

Từ trong trang web của bạn, có chức năng javascript chạy trên bộ hẹn giờ sau mỗi vài giây (hoặc bất kỳ khoảng thời gian nào phù hợp nhất với tình huống của bạn).

Bắt đầu hẹn giờ đó khi tải trang.

Chức năng javascript đó gọi một cuộc gọi AJAX đến dịch vụ web trên máy chủ web của bạn (thêm vào đó trong giây lát).

Ở phía máy chủ, bạn sẽ cần một số loại hệ thống theo dõi các sự kiện này và lưu trữ chúng ở đâu đó chẳng hạn như trong bảng cơ sở dữ liệu có dấu thời gian. Vì vậy, ví dụ khi XYZ tạo một tài khoản, nó sẽ được ghi vào bảng "sự kiện" này trong db.

Dịch vụ web được gọi bằng cuộc gọi AJAX sau đó sẽ chạy truy vấn trên bảng đó và truy xuất tất cả các mục nhập kể từ lần cuối cùng nó được gọi. Sau đó, chỉ cần cập nhật trang web với những kết quả đó.

Rõ ràng không phải là 100% "trực tiếp" vì sẽ có sự chậm trễ nhỏ tùy thuộc vào khoảng thời gian bạn đặt trong bộ tính giờ JS nhưng nó khá gần.

+0

Tổng quan tuyệt vời. –

+2

+1 Ngoài ra, hãy xem [Pusher] (http://pusher.com/), [Long Polling] (https://en.wikipedia.org/wiki/Push_technology#Long_polling) – drew010

+0

Cảm ơn bạn rất nhiều! Tôi đã cố gắng tìm thấy điều này ở khắp mọi nơi trên internet. Ý tưởng rất thấu đáo và tuyệt vời. Không bao giờ nghĩ về điều này và nhìn vào các yêu cầu mạng trong Facebook, đó là những gì họ làm. Mỗi 219 ms là chính xác.Một câu hỏi cuối cùng, bằng cách sử dụng phương pháp này, có cách nào để máy chủ bị sa lầy nặng nề sau nhiều năm hoạt động với hàng triệu yêu cầu không? Cảm ơn! –

7

Bạn có thể tạo dịch vụ thông báo đẩy cho trang web của mình bằng cách sử dụng các ổ cắm web và suy thoái duyên dáng cho dự phòng bỏ phiếu dài cho các trình duyệt không hỗ trợ websockets. Điều này đòi hỏi một lượng kiến ​​thức kỹ thuật/lập trình lành mạnh.

Một số nguồn lực tốt cho việc này là: http://socket.io (trong đó sử dụng một backend Node.js cho cổng web và xử lý suy thoái) http://pusherapp.com (một giải pháp thương mại nếu bạn không muốn để cuộn và duy trì dịch vụ của riêng bạn)

đối với một danh sách các trình duyệt hỗ trợ WebSockets, bạn có thể tìm kiếm cho "caniuse" - cung cấp chi tiết các tính năng tuyệt vời để hỗ trợ bởi phiên bản trình duyệt

Lưu ý: đối với nhiều triệu người sử dụng các ứng dụng như Facebook, tôi sẽ cho rằng họ đã cân nhắc lợi thế của việc chạy websockets cho hơn 50 triệu người dùng đồng thời và đồng ncluded rằng giữ dữ liệu nhất quán trên tất cả các nút kết nối với hàng triệu ổ cắm sẽ là quá nhiều. Tôi có thể tưởng tượng nó sẽ là một cơn ác mộng logic để làm điều đó trên một hệ thống ổ cắm thay vì một cơ sở hạ tầng cơ sở sql hành động cơ bản. Mặc dù vậy, tôi không thể nói thay mặt họ, điều này đơn giản là giả định của tôi. Tuy nhiên, bạn sẽ ngạc nhiên về số lượng trang web đã sử dụng hệ thống đẩy và bỏ phiếu gần đây :)

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