2011-07-12 10 views
11

Facebookがニュースフィードのようにブラウザにデータをプッシュする方法について私は興味があります。ページをリロードしたりボタンをクリックしたりせずに新しいデータがフィードの上部に表示される
Facebookは設定された間隔でAJAXを通じてサーバーをポーリングすることでこれを達成していますか?
もしそうなら、どのような言語やAPIを使っていますか?Facebookはどのようにデータをニュースフィードにプッシュしますか?

+2

Firebugを持っている場合は、コンソールで見てください。おそらくAJAXリクエストを介してGETリクエストが表示され、無期限に回転します。実際の質問は、タイムアウトや間隔で設定されていないように、このリクエストを開いたままにする方法です。 – grep

答えて

3

実際には「ロングポーリング」、つまり'comet'と呼ばれています。 server pushを実行するさまざまな方法がありますが、最も一般的な方法は、データを受信して​​いる間に接続を開いたままにすることです(ブラウザにはホストへの接続の数の制限があるため欠点があります)。 FacebookはTornado web serversをオープンソース化していました。これは多くのオープンな接続を処理できます(多くのユーザーがいて問題はありますが、たとえばApacheを使用しています)。 AJAXの応答を受け取った瞬間に、新しい要求を実行して次の応答を待つだけです。

2

彼らはAJAXでプッシュし、(少なくともUSEDで使用する)無限のスクロールを使用します。

だから、あなたはあなたのページをロードしたい、と彼らがログインしているユーザーに基づいていくつかのメッセージをロードするために、サーバーへの最初の呼び出しを行いたい、jQueryのようなフレームワークを持って言う:

http://api.jquery.com/jQuery.ajax/

そして、あなたが下にスクロールすると、ページの一番下に近づいていることをメモし、データを残さないようにもっと読み込む必要があります。これは、無限スクロールと呼ばれ、あなたはDOMのどこにいるかを追跡している:

ほんの一例:http://ajaxian.com/archives/implementing-infinite-scrolling-with-jquery

3

基本的にコードは、そのサーバーへのAJAX呼び出しを行い、そしてどちらかの別をトリガー応答を待ちます要求を受け取ったり、タイマーでポーリングしたり、プッシュされるとすぐにデータを受け取るためにwebsocketを開きます。これは、もちろん、フィードの上部に表示される「新しい」データ用です。ページが最下部に達すると、次のn個の項目を取得するために別のAJAX呼び出しが行われます。

関連する問題