みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Facebookの通知機能

Webサービスの勉強をしているものです。ちょっと疑問があるので教えてください。

FacebookやTwitterなどのSNSによく見られますが、友達として登録している人がサイトで書き込みをすると、自分のタイムラインに自動的に表示されたり、Facebookだと音でも通知してくれる機能があると思います。Push配信と言うのでしょうか。

こんな感じでページをリロードして読み直すのではなく、サーバー側から配信する方法を探しています。スマホアプリではなく、ブラウザに対して、です。

ちょいちょい調べたのですが、以下のような方法があることがわかりました

1.Ajaxで定期的にサーバーに問い合わせをかけて変更があれば更新する
2.Comet
3.WebSocket

Facebookの通知ってどのように実現されているのでしょうか。上記以外にも新しい技術が出てきているのでしょうか。ご存じの方がいらっしゃれば、教えてください。

投稿日時 - 2014-06-21 17:04:49

QNo.8647474

困ってます

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

回答がつかないようなので、FacebookやTwitterなどに詳しいわけではないんですが、一般論として……。

1.Ajaxで定期的にサーバーに問い合わせをかけて変更があれば更新する

たいていは、これだと思います。タイマーなどで定期的にサーバーにチェックをして、更新されていれば処理する、という方式ですね。サイトに書込をするとタイムラインに表示される、といっても、それは「リアルタイム」である必要はありません。10秒や20秒遅れても全然問題ないわけですね。そうした「厳密なリアルタイム性が要求されない」ものは、この方式が普通だと思います。

2.Comet

これは、下のWebSocketの代用品(?)みたいなものです。Ajaxでサーバーに問い合わせを行い、その状態を保持し続けることでサーバーとのリアルタイムなやりとりを可能にします。これは、一時期多用されましたが、今はWebSocketに置き換わっているように思えます。

3.WebSocket

最近、増えているサーバーとのリアルタイム接続を可能にする技術です。これを使えば、サーバーに更新が送られた時点で即座にブラウザを操作することができます。ただ、TwitterやFacebookなどがタイムラインの更新にこれを使っているとは思えません。理由は、サーバー側のコストです。

WebSocketは、通常のWebサーバーでは使えません。Webサーバーとは別に、WebSocket用のサーバーを用意し、それにブラウザから接続をします。そして重要なのは、その接続をずっと維持し続けるということです。つまり、Facebookなどでは、数億の接続を常に維持し処理し続けることになります。ラフに計算しても、数十万~百万台ベースのWebSocketサーバーが必要となるでしょう。

1の方式なら、多少のタイムラグがあるだけで普通のWebサーバーで処理できますし、それなら既に数億人のユーザーを持つFacebookなどの企業は十分対応できるサーバー能力を確保しているはずです。わざわざ膨大なリソースを消費する方式を選択する理由はないでしょう。

ちなみに、私自身も1の方式は使いますが、WebSocketはまず使いません。WebSocketサーバーに対応しているサービスがそれほど多くないのと、私が普段良く使うGoogle app engine(クラウドサービス)でもWebSocketは無料枠で100個までしか接続できず、それ以上はけっこうな費用がかかります。有料サービスなどでなければ割に合いません。

WebSocketは、例えばチャットアプリのようにリアルタイム性が要求されるサービスでは有効ですが、単なる更新のようなもので使うのは明らかにオーバースペックです。

投稿日時 - 2014-06-30 09:09:24

あなたにオススメの質問