2011-01-22 42 views
78

Tôi đã bắt đầu dự án trong Rails 3 và tôi cần thêm thông báo (như Facebook). Cách tốt nhất là sử dụng WebSocket cho các thiết bị hỗ trợ như iPad, nhưng tôi không thể tìm thấy bất kỳ công cụ tốt nào để dễ dàng triển khai nó trong Rails. Tôi tìm thấy Pusherapp, nhưng giá của họ đang áp đảo, và tôi cũng không nghĩ rằng việc cung cấp dữ liệu của tôi cho công ty bên thứ ba sẽ là khôn ngoan. Vì vậy, điều cần thiết:Công cụ WebSocket Ruby on Rails tốt nhất

  • Open Source
  • Một số loại kênh hỗ trợ
  • Helpers cho Rails (và làm việc với Rails 3)

Trả lời

78

Nếu bạn đang tìm kiếm triển khai WebSocket đơn giản, thì EM-WebSocket có lẽ là tốt nhất. Nếu bạn muốn hỗ trợ cho dự phòng không flash (như điện thoại cũ hoặc iPhone 3G), bạn nên thử Socket.IO-rack.

Để triển khai đầy đủ tính năng như Pusher (với xác thực và kênh), bạn có hai lựa chọn mã nguồn mở: SockyJuggernaut.

Socky là một dự án ruby ​​thuần khiết sử dụng EM-WebSocket (như pusher) và nó có một số công cụ tuyệt vời cho Rails. Mặt khác, Juggernaut có nhiều lịch sử hơn (và nhiều người dùng hơn) nhưng phiên bản mới được viết lại thành Node.JS (máy khách vẫn dựa trên ruby) và yêu cầu Redis. Cả hai sẽ hoạt động tốt.

+4

Đối với những người quan tâm, Juggernaut [hiện không được chấp nhận] (http://blog.alexmaccaw.com/killing-a-library). Tác giả khuyên bạn nên sử dụng HTML5 [Server-Side Events] (http://www.html5rocks.com/en/tutorials/eventsource/basics/) thay vào đó và cung cấp một bình luận tốt đẹp trong liên kết thông báo không dùng nữa. –

+2

Theo dõi nhận xét của @ Jeff, Rails 4 cung cấp hỗ trợ tích hợp cho SSE thông qua mô-đun ActionController :: Streaming. Tài liệu tại đây: http://api.rubyonrails.org/classes/ActionController/Streaming.html – user456584

+0

Hãy xem [Plezi] (https://github.com/boazsegev/plezi) - một khung công tác Ruby có thể hoạt động như một mình hoặc bên trong ứng dụng Rails hiện có của bạn. Nó thay thế máy chủ Rack của bạn bằng [GRHttp server] (https://github.com/boazsegev/GRHttp) để bạn có thể chạy Plezi cho websockets hoặc thêm các tuyến Html cũng như sử dụng Rails trên cùng một máy chủ và cổng. Bằng cách này, thật dễ dàng để lưu (hoặc gửi) dữ liệu ActiveRecord bằng cách sử dụng các ổ cắm web - Đó là tất cả cùng một mã. – Myst

9

Một tùy chọn khác có thể đáp ứng nhu cầu của bạn nhưng có một chút bí truyền hơn là sử dụng một trong các máy chủ ứng dụng Jruby và sử dụng một trong các cài đặt websockets Java. Cầu cảng (cơ sở cho Trinidad) được biết là có hỗ trợ websockets tốt nhất hiện có. Một tùy chọn khác (khá thú vị) là sử dụng máy chủ nhắn tin có trình bao bọc websocket cho các điểm cuối thông báo. Ví dụ: Torquebox (máy chủ ứng dụng dành riêng cho Jruby/Rails) có hỗ trợ tích hợp cho HornetMQ, lần lượt có support for websockets.

19

Hãy xem faye.

+4

http://railscasts.com/episodes/260-messaging-with-faye – Kris

+3

Faye có xếp hạng phổ biến cao hơn vào tháng 12 năm 2012, theo Ruby Toolbox - https://www.ruby-toolbox.com/categories/HTTP_Pub_Sub . –

+1

Thực sự fay có sử dụng websockets và redis như juggernaut không? – JohnMerlino

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