web-dev-qa-db-ja.com

リアルタイム更新はどのように機能しますか?

現在、頻繁に使用される最も人気のあるサイトでは、毎日のリアルタイム更新が一般的です。

これらの「リアルタイム更新」はどのように機能するのでしょうか。一般的な鳥瞰図を探しています。 JSが更新のためにX秒ごとにサーバーを呼び出して、それを<ul>に追加することはできないと思います。サーバーから送信された通知は、より多くのコンテンツをプルするために送信されましたか?

デモでこれを説明する簡単なハウツー記事があれば素晴らしいでしょうか?

34
Anthony

Stack Overflowは、リアルタイムの更新に Web Sockets を使用しています。ソースコード(2012年のソースコード)を見ると、次のようになります。

StackExchange.ready(function () {
    StackExchange.realtime.init('ws://sockets.ny.stackexchange.com');
    StackExchange.realtime.subscribeToInboxNotifications();
    StackExchange.realtime.subscribeToReputationNotifications('1');
});

ただし、一部のOperaバージョンはWebSocketをサポートしていないことに注意してください。( Opera 10.7 まで)

ただし、FacebookはWeb Socketsを使用していないようで、サーバーが新しい情報が得られるまで接続を保持する long polling という手法で単純なXHRを使用しているだけだと思います。リクエストに応答します。開発ツールを開くと、ステータスが保留中のリクエストが常に1つあることがわかります。

実際、約60秒ごとにリクエストを送信しています。

26

Twitterも「リアルタイム更新」にシンプルなXHR(1分間隔)を使用しているようです。

2
Jaime

Facebookはlong polling/Cometを使用します。そのため、接続を確立して応答を待ちます。応答がない場合は、タイムアウトして再試行します。タイムアウトは約40秒です。これが、ほとんどのインスタント更新を行う方法です。ただし、それらは技術の組み合わせを使用します。ロングポーリングの詳細については、こちらをご覧ください。

http://en.wikipedia.org/wiki/Comet_(programming)

0
Panama Jack