2012-01-26 6 views
2

私はいくつかの他のウェブサイトから来ているトピックについての最新の更新が表示されているDIVを持っていたWebアプリケーションで作業を使用しています。だから私が望むのは、データがバックエンドデータベースで実際に更新されるとすぐにDIVを更新することです。定期的な時間間隔の後にページのコンテンツを自動更新する最も良い方法は何ですか?

バックエンドで、私はcronを使用して&をデータベースに格納しています。

これを行う簡単な方法は、setInterval()関数を使用して特定の時間間隔でデータを取得し続けることですが、これはサーバーに不必要な負荷をかけるだけでCPUサイクルを浪費すると思います。

これを実装するにはどうすればよいですか?私はnodeJsを使うことができますか?

-おむす

P.S. Facebookの中でニュースフィードを更新するためにFacebookのようなものが必要なだけです。

と私はまだnodeJsの経験がありません。正直なところ、私はnodeJsがこれに適しているかどうかわかりません。

+0

再帰的な 'setTimeout()'。または、現在のタブ/ウィンドウではないときにクランプされる 'setInterval()'です。 – alex

答えて

2

バックエンドサーバーを繰り返しポーリングせずにブラウザーの表示を効率的に更新する方法が問題の場合は、「長いポーリング」を使用して、長いタイムアウトでWebサーバー要求を行い、リクエストは、実際に何らかの新しいデータがある場合や、最終的にタイムアウトする場合にのみ返されます。あなたはGoogleやSOを検索して "javascript long polling"の詳細を読むことができます。最近のブラウザで

How do I implement basic "Long Polling"?

How to implement Server push/long polling/comet using PHP and Javascript

http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

、あなたのクライアントがサーバに直接ソケットを開き、どこにもウェブソケットを使用することができます。ここでは、これらの参照のいくつかはありますサーバーは新しいデータがあるときに新しいデータを送信します。

どちらの場合でも、同時に多数のアイドル状態の接続を処理できるバックエンドサーバーが必要です。

+0

答えてくれてありがとう私はあなたにリンクを投げに行くつもりですが、私の場合はnodeJsを使うことについて何を言っていますか?それは助けるだろうか? – Peeyush

+0

@Peeyush - 私はnode.jsを知らないそれは確かに必要ではありません。 – jfriend00

+0

長いポーリングは使用しないでください。ウェブソケットを使用してください。 – Raynos

0

ノードは確かにこれには便利ですが、jfriend00が言うようにノードは必ずしも必要ではありません。サーバーからブラウザへの「プッシュ」通知の例については、socket.ioをご覧ください。 node.jsに関する経験がないので、ソリューションとして推奨するかどうかは、アプリケーションによって異なります。これが教育目的のためのちょうど趣味のプロジェクトであれば、私は先に行くといいでしょう。これが本番システム用で、まだnode.jsを他の容量で使用していないのであれば、あなたの質問で言及したsetIntervalメソッドのような単純なものに固執します。

0

グーグルsocket.io/now.jsをお試しください。ウェブソケットを使用してクライアントにプッシュし、フラッシュソケットに正常にフォールバックして問題を簡単に解決します。すべてのコードをnode.jsに移植する必要はなく、元のコードと一緒に使用します。 間隔が元々5分のようなものだった場合は、setInterval ajaxを使用する方が良いでしょう。 Websocketはリアルタイム通信に最適です(チャットなどの短い待ち時間で数秒以内に)。

関連する問題