2017-01-08 6 views
-1

私はサーバープッシュテクノロジを初めて使用しました。いくつかの調査を行い、サーバー送信イベントについて知りました。接続された複数のクライアント用のサーブレットを使用したサーバーサイドイベント

私はライブ監視ソフトウェアを実装しています。バックエンドはJavaサーブレットで構築されています。同時に30〜50台のブラウザがサーバに接続されたままになります。

私の研究で私は私の心の中に3つの質問があります。

  1. は、私は、クライアントが、私は無限ループを使用しない場合は、それがどうなる5秒後に再びポール、ないように、無限ループを使用する必要がありますか?

  2. サーブレットの受信リクエストと実行サービスメソッドごとに別々のスレッドが作成されていることがわかっています。私のサーブレットで無限ループを使用して、上記の最初のポイントで説明したプロセスを実行しています。接続されたクライアントを一度に表示できます。それで、実行し続ける50個のスレッドが別々になることを意味しますか?クライアントの数が50から100に増加し、スレッドが50から100に増加するなどと言いますか?

  3. 私が上記2のポイントにいるのであれば、私の場合はsseはライブ監視には適していません。クライアントの数が増えるにつれてサーバーリソースがなくなりますか?

答えて

0

が回答

  1. あなたはサーブレットを使用している場合ははい、あなたはおそらくでは、睡眠と、無限ループを持っている必要があります。
  2. 正しいが、あなたがリクエストごとに1つのスレッドを使用し、これらのスレッドはサーブレット・コンテナからのHTTPリスナー・スレッドになります。
  3. はい、HTTPリスナースレッドがなくなると、リクエストは拒否されます。あなたは簡単にTomcatに200のスレッドを持つことができます。もしあなたがしていることがすべてスリープ状態になり、各クライアントに小さなデータを送り返せばおそらく動作します。

しかし、この本は、あなたがこれまでに200クライアントを超えて拡張する必要がある可能性がある場合は特に、私はサーブレットAPIを使用して解決する問題のような音はありません。代わりに、エンドツーエンドのNIOソリューションを使用します。つまり、接続ごとにスレッドを必要としません。

NettyまたはRatPackを見てみましょう。サーブレットAPIとは異なるプログラミングスタイルですが、より良い選択と思われます。これはイベント駆動型で、数千のクライアントを接続することができ、CPUコアあたり1つのスレッドしか使用できません。

サーブレットコンテナを使用する場合は、Springフレームワークについてよく知っておくことをお勧めします。実際には、httpリスナー・スレッドを使用せずに別のスレッド・プールにロードする、Springを使用してソリューションを作成することは可能です。

もう1つの解決策(クライアントがブラウザであるため)はWebSocketを使用することですが、ここでもSpring Frameworkを使用します。

0
  1. あなたは限り、あなたはクライアントへの接続のどこかに保つよう、あなたは接続要求、タイマーイベントなどの特定のイベント(などでデータを送信することができ、それをする必要はありません...)

  2. これは当てはまりません。 SSEは、複数のクライアントに対して単一の接続を共有する非同期サーブレットと結合されています。

  3. AFAIK(ただし、ベンチマークされていません)、SSEはウェブソケットを含む他の同様の代替製品よりも軽量です。

あなたはJEaSSEライブラリを使用することにより、サーブレットで軽量SSEの例を参照したい場合は、READMEに見てください。https://github.com/mariomac/jeasse

関連する問題