2011-01-20 14 views
6

Tôi muốn tạo một hệ thống thông báo đẩy như Facebook. Bất cứ khi nào Facebook muốn cho bạn biết điều gì đó (như ai đó đã nhận xét về bài đăng, gắn thẻ bạn, v.v.), bạn sẽ thấy một thông báo nhỏ hiển thị ở góc dưới bên trái của màn hình. Nó biến mất và mờ đi.thông báo kiểu push giống như Facebook với Rails và jQuery

Làm cách nào để xây dựng một hệ thống như thế này với jQuery và Rails? Nó hoạt động như thế nào? JS có liên tục hỏi máy chủ không, "có thông báo mới không?" hoặc máy chủ bằng cách nào đó đẩy vào dịch vụ này.

Ngay bây giờ, nếu người dùng gửi tin nhắn của người dùng khác (ví dụ), tôi có thể thêm thông báo vào hàng đợi của người dùng nói "bạn có tin nhắn mới", nhưng nó sẽ không xuất hiện cho đến khi tải lại trang.

Trả lời

6

Juggernaut trông thực sự tuyệt vời, tôi đã xem nó được giới thiệu từ lâu rồi, bây giờ nó được viết lại trên đỉnh node.js. Tốt đẹp. Bạn phải cài đặt redis và node.js và chạy một máy chủ node.js và phần còn lại là dễ chết.

Pusherapp.com cũng có vẻ thú vị, nó đang trả tiền, nhưng ít nhất bạn không phải cài đặt và chạy các dịch vụ bổ sung (và daemonise, mở rộng quy mô, ...).

Nhưng nếu tải không quá lớn, tôi muốn giữ mọi thứ đơn giản và chỉ cần thăm dò ý kiến ​​bằng javascript. Bạn có thể dễ dàng viết của riêng bạn (nó không phải là quá khó), nhưng một số plugin rất tốt đã tồn tại cho jquery. Ví dụ: PeriodicalUpdater.

4

Hiện tại, các sự cố như vậy có thể được giải quyết bằng cách sử dụng Comet.

Để biết thêm, http://en.wikipedia.org/wiki/Comet_(programming)

Về cơ bản trình duyệt sử dụng HTTP là một giao thức stateless và bởi vì nó chỉ hoạt động trong một yêu cầu sau đó phản ứng kinda cách nào, chúng ta có thể không bao giờ thực sự có được một thực đẩy thông báo. Khi muốn đẩy lên trình duyệt, chúng tôi phải bằng cách nào đó bắt chước giao thức TCP/Socket như kết nối đó để đẩy nó. Comet chỉ là một thuật ngữ được sử dụng để xác định các kỹ thuật như vậy.

Có nhiều thư viện trợ giúp trong điều này.eg:- Orbited, Juggernaut on rails.

Với trình duyệt mới có cái gì đó được gọi là Giao thức Websockets, các thư viện tôi đã đề cập tận dụng lợi thế của điều này. Một chủ đề rộng lớn của nó, nhưng tôi khá chắc chắn, bạn sẽ tìm thấy một số ví dụ cơ bản với Juggernaut và Rails.

Ngoài ra còn có http://pusherapp.com, thực hiện tương tự nhưng tính tiền cho nó.

2

Một cách khác rất nhiều các trang web đạt được các tính năng như đây là bosh, hoặc suối hai chiều trên đồng bộ http:

http://en.wikipedia.org/wiki/BOSH

Đây là một trong số ít các thư viện javascript ngoài kia:

http://code.stanziq.com/strophe/

Loại thiết lập này yêu cầu máy chủ xmpp/bosh trên chương trình phụ trợ, nhưng về cơ bản trình duyệt giữ kết nối mở (cực kỳ giống với sao chổi) và khi thư đến ở trán ser xử lý chúng.

Kỹ thuật này có thể được sử dụng cho thông báo, trò chuyện và mọi thứ bạn muốn xảy ra trong thời gian thực.