複雑な要件が多数のユーザー(&サーバー)に設定されている場合、特にブロードキャストでwebsocketインフラストラクチャ(サーバー)の規模がどのように拡大しますか?Websocketのスケーラビリティ、ブロードキャストに関する懸念
もちろん、ブロードキャストはwebsocket仕様の一部ではありませんが、基本的なチャットの例(a.k.a. hello world for websocket)でもあります。
クライアントサイド(新しいデータを求める)ソリューションは、ウェブソケットの待ち時間が少なく、比較的安価な(httpヘッダーレス)性質を持つサーバー側(ブロードキャスト)ソリューションよりもスケーラビリティが高いようです。
編集:
OKは、ちょうどあなたが非常に多くの異なるコンテキスト内でそのように多くの接続を意味する可能性があるのWebSocketの実装で、すべてのAjaxコードを交換したいと思います。これは、ブロードキャストのためのすべての可能なシナリオを把握したい場合、システムに非常に複雑なものを追加します。
低レベル(ネットワーク/スレッドなど)レベルの実装提案も問題ではありません。これは、一般的なhttpサーバーとは異なり、特別なサーバーをコーディングする必要があるためです。
さらに、ブロードキャストは、簡単に拡張できないステートフルな性質をテーブルにもたらします。サーバーの追加と負荷分散について考えてみましょう。
IMHOは、 "すべてのクライアントが誰であるかを知る"ということは、サーバ側のWebソケット開発においてそれほど簡単ではありません。あなたはコンテキスト内のすべての人を効率的に追跡しなければなりません。また、複数のサーバーを持つことでより複雑になります。 新しいサーバーを簡単に追加できるように、サーバー実装がクライアントについて知る必要がないため、新しいデータを要求するIMOはスケーラビリティに優れています。また、HTTPヘッダーレスWebSocketを使用すると、帯域幅を小さくしておくことができます。 –
あなたが何をしていても、サーバはオープンソケットのリストを保持しなければならないので、クライアントについて知っている必要があります。オープンソケットのリストがないと、そこから入ってくるデータを聞くことができません(例えば、 'select'や' epoll'関数に渡すファイル記述子のリストはわかりません)。私は思っている送受信データ用のバッファを追跡する必要もあります。オープンなTCP/IP接続を忘れることはできません。とにかくそのリストを追跡しているので、必要に応じて、自分の識別データのいくつかをそのリストに追加するのはあまり難しいことではありません。 –
あなたはほぼセッションとソケットのコンセプトを混ぜています。最初はアプリケーションレベル、後者はネットワークレベルです。実際には、あなたはそれを深くしたいとは考えていません。 IMHO、アプリケーションレベルでこの問題を考える方が良いです。 –