3

自分のサイトにリアルタイムでコンテンツをプッシュする方法を考えています。しばらく調べてみたところ、この作業を行う方法はたくさんあることに気づきました。

最初の考慮事項:いくつかのソーシャル機能を備えたRails 3アプリがあります。達成したい機能の1つは、新しいアクティビティが作成されたときにユーザーに通知することです。私の最初のアプローチは、SSEと、最後にロードされたアクティビティの後にDBで新しいレジストリを検索するコントローラを実装することでした。

これは機能しますが、新しいアクティビティが作成されたときに、DBクエリを実行せずに、アクティビティをすべてのアクティブユーザー(そのアクティビティに関連する)にプッシュするだけでよい場合は、DBクエリが多すぎます。

私の2番目のアプローチは、新しいアクティビティが作成されたときにキャッチするコントローラーとオブザーバーを指すルートを作成し、後で作成された現在のアクティビティをコントローラーに渡し、最後にSSEを介してアクティビティを部分的にレンダリングすることでした。

ここに私の問題があります..オブザーバーをコントローラーに接続し、レンダリングする現在のアクティビティを渡すにはどうすればよいですか?そこで、メタルコントローラーやアブストラクトコントローラーなどの別のコントローラータイプを使用できますか?

この時点で、私はそれがこの仕事をするための別のアプローチである可能性があることに気づきました。別の言語やフレームワークで開発することなくこれを行う方法を見つけることができれば本当に素晴らしいでしょう。それはリアルタイムアプリをより簡単にすることができます..あなたはどう思いますか?私は正しい方向に進んでいますか、これを達成するために何をすべきですか?どうもありがとう!!

4

2 に答える 2

5

Rails3.0+はPubNubを使用してリアルタイムでコンテンツをプッシュします

あなたが言うように、あなたが言うように、あなたのウェブサイトまたはウェブアプリのいくつかのソーシャル機能であなたのユーザーにリアルタイムの更新を安全かつ確実にプッシュするために、これで考慮すべき多くのオプションと多くのニュアンスがあります。 これには宝石があります! また、Rails 3.0以降のアプリとWebサイトの簡単なスタートガイドをここに提供することで、開始を支援します。gem install pubnubまず、PubNubと呼ばれるリアルタイムコンポーネントを実行します。これにより、ターゲットユーザーまたはWebサイトやアプリのユーザーグループに直接通知を送信できます。これにより、オンラインでRailsサーバーからの通知の受信に関心のあるユーザーのみをターゲットにすることができます。これは、サーバー上でDBルックアップやその他のリソースを大量に消費する操作を必要としない効率的なサーバー送信イベントと見なすことができます。

RubyGEMインストール

gem install pubnub

PubNubGEMが必要

require 'pubnub'

PubNubクラスを初期化します

pubnub = Pubnub.new(
    :publish_key   => 'demo', # publish_key only required if publishing.
    :subscribe_key => 'demo', # required always
    :secret_key    => nil,    # optional - message signing
    :cipher_key    => nil,    # optional - AES 256 Crypto
    :ssl           => true    # optional - SSL 2048bit
)

Rails3.0+からWebアプリにメッセージを送信

これで、クラスの準備ができたRailsアプリからpubnub、文字列、数値、配列、辞書/オブジェクトなど、あらゆる種類のJSONデータ型を送信できます。

  • 文字列"
  • 番号123
  • 配列[1、2、3]
  • オブジェクト{:a=>"アップル"}

次のコードは、Railsアプリからユーザーが実行しているブラウザーまたはWebアプリに直接メッセージを渡すプロセスを示しています。基本的に、サーバーから直接データを送信する必要がある場合は、データをユーザーに送信します。このpubnub.publish(...)関数は、モバイルアプリやウェブアプリに転送するために、送信したメッセージをJSONとしてシリアル化します。

## Broadcast or Unicast to Browser App User(s)
pubnub.publish(
    :channel  => "event_feed_channel",
    :message  => { :event => "update", :from => "Jay", :feed => "New Updates!" },
    :callback => lambda { |info| puts info }
)

このプロセスは、パフォーマンスとセキュリティの考慮事項に最適であり、DBクエリを必要としません。データベースサーバーやその他のリソースを大量に消費する操作を槌で打つことからあなたを救います。RailsアプリケーションでPubNubGEMを使用している間は、 このプロセスをSSE(サーバー送信イベント)と見なすことができます。

PubNub GEMを使用すると、基本的にサーバーからユーザーのブラウザー/アプリに直接イベントを送信します。これにより、クライアント側の定期的なAJAXリクエストが不要になります。これは、新しい情報が利用可能になったときにのみユーザーにデータを送信するためです。また、ホームサイトにアクセスして、Ruby機能の詳細を確認することにより、プレゼンスやストレージ/再生などのPubNubリアルタイムネットワーク機能の使用を検討することもできます。また、Railsコードへの統合中に必要に応じて、DevelopersDevConsoleをデバッグに使用します。

サーバー送信イベントを受信するようにブラウザを設定する

次に、initを実行してサーバーから送信されたイベントを受信するようにアプリを設定する必要があります。

<script src=http://cdn.pubnub.com/pubnub-3.4.2.min.js ></script>
<script>(function(){

    // Class Setup
    var pubnub = PUBNUB.init({ subscribe_key : 'demo' });

    // Event Hook Setup
    pubnub.subscribe({
        channel : "event_feed_channel",
        message : function(m){ pubnub.events.fire( m.event, m ) }
    });

    // RECEIVE the "update" Server Broadcast Event in the Browser
    pubnub.events.bind( "update", function(message) {
        console.log( "update a <div> with received event: ", m );
    } );

})();</script>

高度なサブスクライブ接続オプションとイベントに興味があるかもしれないことに注意してください。

"update"イベントがrubyコードの:event => "update"メッセージ値とどのように同一であるかに注意してください。これは、指定した名前に基づいてイベントがトリガーされることを意味し、Webアプリページで実行するコードをトリガーするには、イベントをバインドする必要があります。このトリガーされたイベント内で、ユーザーが画面にリアルタイムで表示したい関連する詳細でユーザーインターフェイスを更新します。

また、:channel => "event_feed_channel"はチャネルであり、これはJavaScriptクライアントコードpublishのチャネルと同じである必要があります。subscribe

Ruby GEMのソースコードを読みたい場合は、GitHubPubNubRubyベースのAPIを介して入手できます。

これらは、Ruby 3.0以降のアプリの使用を開始し、サーバーからエンドユーザーにイベントを直接送信するための基本です。これは、iOSWebブラウザーまたはAndroidブラウザーで実行されるモバイルアプリでも機能することに注意してください。このメカニズムでは、古いバージョンのIEもサポートされています。さらに、オプションで、RailsサーバーからネイティブiOSアプリケーションおよびネイティブAndroidアプリケーションに直接サーバー送信イベントを検討することもできます。ご不明な点がございましたら、このフォーラムで質問してください。

于 2013-03-15T19:16:02.403 に答える
0

リアルタイムRailsgemとサンプルリアルタイムサーバー(node.js)を構築しました。これにより、PusherやPubNubなどの有料のサードパーティを必要とせずに簡単なリアルタイムメッセージングが可能になります。Rails3+で動作します。

于 2014-07-23T02:56:48.120 に答える