2012-02-23 7 views
1

私は、ユーザーにHTMLテーブルを介してデータベースの内容を編集するオプションを提供しているアプリケーションを開発しています。しかし、私は、ユーザーが何かを更新すると、他のユーザーのビューが自動的に更新されるように、このコラボレーションを行いたいと考えています。プッシャーなどのライブラリを使用してデータベースからビューを自動更新

私はデータを保存/更新するためにAJAX関数を呼び出しています。

これで、更新があるかどうかクライアントがサーバーに継続的に尋ねるポーリングを使用できます。しかし、これは非効率的です。

Webを検索私はWebソケットを使用できることがわかりました。そのために、Pusher、Slangerなどのライブラリを使用できます。

しかし、これらのライブラリを使用してHTMLテーブルを自動更新する方法については何も見つかりません。

何か提案がありがとうございます。

答えて

2

あなたがポーリングに興味がないなら、パブ/サブサーバーがおそらくあなたが探しているものです。

私はJuggernautをチェックアウトすることをお勧めします。クライアントブラウザは、ポーリングしないサーバーへの長時間接続を確立することができます。サーバーがプッシュを送信すると、そのプッシュからのJavaScriptを直接クライアントページに表示することによって応答します。

Juggernautの著者は、あなたが探しているもの、つまりサーバーに加入し、接続から読み取ったときにクライアントが存在するページを更新するサンプルプロジェクトHollaを持っています。 Hollaはこれを使ってチャットサービスを作成しますが、同じコードを使って他のユーザーがテーブルを更新することができます。

+0

thnx Veraticus。プッシュソケットとポーリングの利点は何ですか?私はプッシュソケットも内部的にポーリングを使用すると思います。私は間違っているかもしれません。これを明確にしてもらえますか?私はJuggernautを見ましたが、本当に便利です。 –

+1

Juggernautは内部的にポーリングを使用しません。サーバーへの永続的なwebsocket接続を使用します。 WebSocketは、サーバーリソースのポーリングよりもはるかに効率的です。ポーリングを行うと、サーバー接続が開かれ、データベースの照会が必要になり、それ以降何も変更されていなくてもビューがX秒間レンダリングされますが、変更が行われたときにポーリングがクライアントに通知するため、通信方法。 – Veraticus

+0

私はあなたの最後のコメントの最後の行に(ポーリングしながら...)あなたは 'プッシュソケット'と言うと思います。はい私はあなたのポイントを得た。またどのライブラリがどの行/フィールドが変更されたかを知ることができます。またはすべてのデータを更新するだけです。私の場合、更新されたセルだけをリフレッシュする必要があります(グーグルスプレッドシートが必要なセルだけをリフレッシュするように)ので、フラグを維持する必要がありますか?またはライブラリにはそれをサポートしています。 –

1

私はこれを使用しませんが、pusher.jsのクイックグーグルは、これで十分です。ブラウザ側では、イベントハンドラを定義します。

サーバー側でイベントをトリガーし、イベントとともにいくつかのデータ(作成されたレコードなど)を送信できます。これは文字列かハッシュのどちらかです。ハッシュはJSONに変換されます。

送信するデータの種類は、jqueryなどのライブラリを使用してテーブル内に新しい行を作成したり、必要なHTMLを生成したりすることができます。 Railsコンテキストでは、JSONの代わりにhtml-stringを生成するためにレンダリングを使用すると、パーシャルとテンプレートを使用できます。ここでもjqueryを使ってDOMに挿入するのは簡単です。

プッシャー機能を統合したRuby on Railsの宝石もあります。 pusher tutorial

私が推測するように、slangerのような他のライブラリは多かれ少なかれ同じように動作します。

+0

thnxですが、プッシャーはフリーではありません。フリーユーザーには限られた接続しか提供されません。そしてあなたはそれらのどれかを使ってはいけないと言いましたし、サーバーからクライアントに情報を送る方法を教えてくれました。行が更新されたときなど。いくつかのデータが更新されたことをクライアント/ユーザに通知するにはどうすればいいですか(プッシャーのようなライブラリを使わずに) –

+1

@mashit:あなたの質問は、これらのライブラリを使ってhtmlを更新する方法でした。このようなことを可能にする技術はかなりたくさんありますが、特にあなたがフリーソフトウェアに限定されている場合は、これを設定するのがかなり難しくなるかもしれません。私は[この記事](http://jordanhollinger.com/2011/05/15/writing-an-ajax-long-polling-server-in-ruby-part-1)はそれを行うためのいくつかの方法を示していると思います。 –

+0

thnx thorsten。あなたの答えは役に立ちました。 –

関連する問題