5

Facebookと同じようにリアルタイム通知を作成しようとしています.多くのことを学び、検索した後、私は非常に混乱しています.何が正しくて何が間違っているのか説明してください..


サイトに Facebook と同じ数のユーザーがいる可能性があることを確認してください

  • ロングポーリングでリアルタイム通知できるか?はいの場合、利点、欠点、および制限は何ですか。
  • websockets でリアルタイム通知を行うことができますか?ユーザー数は facebook と同じになる可能性があることに注意してください。そうであれば、利点、欠点、および制限は何ですか。
  • 他の方法があれば教えてください。

錯乱

Web でどこまで学習したかを調べたところ、それWebsocketが良いことがわかりましたが、開いている接続の数に制限 (最大 5K) があるため、一度にユーザーの最大数は 5K にすぎず、これは Facebook のユーザー数よりも非常に少ないことを意味します。間違っていたら説明してください。

4

1 に答える 1

13

あなたは間違っています。Websocket ベースのソリューションは 5K の同時接続に限定されません。

Facebook Newsroomによると、2013 年 9 月の 1 日のアクティブ ユーザー数は平均で約 7 億 2,700 万人、または毎分約 50 万 4,000 人のユニーク ユーザーが Facebook ページにアクセスしています。平均訪問時間が 18 分 ( statisticbrain.comによる調査) の場合、通知インフラストラクチャは、約 900 万 (18*504k) の同時 TCP 接続を 24 時間年中無休で処理できる必要があります。この数値は非常に大まかな概算ですが、そのようなシステムを構築する場合に、彼らが何を扱っているか、また何を処理しなければならないかについて、かなりのアイデアを与えてくれます。

ロング ポーリングと WebSocket を使用して、リアルタイム通知システムを構築できます。どちらの場合も、OS に関連する同様の問題に直面します(説明は Unix ベースのシステム用です)

  • ポートの制限により、1 つの tcp リスナー ソケットは、リッスンしている同じ IP/ポートで 2^16 接続しか受け入れられないため、複数のポートや複数の IP アドレスでリッスンする必要があります。
  • memory、開いているすべての接続は、少なくとも 1 つのファイル記述子を使用します

最新の Linux ボックスが持つことができるオープン TCP 接続の理論上の最大数は何ですかの制限について詳しくは、こちらをご覧ください。

ロングポーリングと Websockets:

ロング ポーリング ソリューションのすべてのポーリングには、新しい HTTP 要求が必要です。これには、Websocket 接続を維持するために必要な帯域幅よりも多くの帯域幅が必要です。さらに、通知は HTTP 応答として返され、新しいポーリング要求が発生します。Websocket ソリューションは、帯域幅とシステム リソースの消費という点ではより効率的ですが、ブラウザ サポートの欠如という大きな欠点があります。

手元の統計にもよりますが、websocket のみのソリューションでは、訪問者の約 20 ~ 40% が無視されます ( statscounter.comの統計)。このため、「物理的な」基礎となるトランスポート モデルから接続の概念を抽象化するさまざまなサーバー ライブラリが開発されました。その結果、最新のブラウザーは websocket を使用して接続を作成し、古いブラウザーは代替トランスポート (HTTP ロング ポーリング、jsonp ポーリング、フラッシュなど) にフォールバックします。そのようなライブラリの顕著な例は、Sock.jsSocket.ioです。

于 2014-01-13T13:54:19.197 に答える