多くのクライアントが中央サーバーに接続するアプリケーションを設計しています。このサーバーはこれらの接続を維持し、30分ごとにキープアライブを送信します。サーバーには、クライアント接続(例:http://server/isClientConnected?id=id)へのインターフェースを提供する組み込みHTTPサーバーがあります。私はこれについてどうやって行くのが最善の方法だろうと思っていました。私の現在の実装はJavaであり、IDのキーをキーにしたマップがありますが、スレッドごとに接続が開始されていますが、これが本当に最適な方法かどうかはわかりません。任意のポインタが評価されるだろう。
おかげで、
アイザック・ウォーラー多くの永続接続を持つサーバーを設計する方法
答えて
このページで説明されているように、java.nioパッケージを使用してください:Building Highly Scalable Servers with Java NIO。また、このページを非常に慎重に読んでください:Architecture of a Highly Scalable NIO-Based Server。
個人的に私はNIOの内部を気にする必要はなく、Apache MINAまたはxSocketのようなフレームワークを使用します。 NIOは非常にわかりにくい方法で間違ってしまうのは複雑で簡単です。それが「うまくいく」ようにするには、フレームワークを使用します。
クライアントが長時間接続する場合、クライアントごとにスレッドを割り当てることが問題となる可能性があります。サーバー上の各スレッドには、一定量のリソース(スタックのメモリなど)が必要です。
Jetty Continuationsを使用すると、非同期サーブレットを使用して、より少ないスレッドでクライアント要求を処理できます。
接続ごとに1つのスレッドを使用すると、通常、1台のマシンで最大10,000の接続を拡張できます。 Windows 32マシンの場合、おそらく1,000回程度の接続制限が発生します。
これを回避するには、プログラムのデザインを変更するか、スケールアウト(水平)することができます。開発コストとハードウェアのコストを重視する必要があります。
通常、単一の連続接続で、ユーザーあたり1つのスレッドが最も簡単なプログラミングモデルです。私はあなたの現在のハードウェアの限界に達するまで、このモデルに固執します。その時点で、私はコードを変更するか、ハードウェアを追加するかのどちらかを決めます。
リアクターパターンについて詳しくは、こちらをご覧ください。 Javaの実装があります(クライアントのスレッドの代わりにチャネルを使用します)。 実装が簡単で効率的です。
- 1. 自宅のJavaサーバーから永続的な接続を維持する
- 2. 多くのエンティティ(JPA)を永続化する方法
- 3. Javaを使用してDBサーバーと永続的な接続を設定する方法は?
- 4. mysql永続接続
- 5. 永続的なプロキシ接続を無効にする方法
- 6. pymssql - 1つの接続ではなくサーバー接続のリスト
- 7. MySQLサーバーの接続方法
- 8. 多くの接続のためのプログラムを設計するには?
- 9. 永続性レイヤーを持つフレンドシステムをモデル化する方法は?
- 10. ESP8266 TCPクライアントでTCP接続を永続的に維持する
- 11. 永続的接続を作成する
- 12. Sinatraアプリケーションで永続的なEM接続を1つ維持する
- 13. ピア2ピア設定で2つのソケット接続を接続する方法
- 14. 外部システムとの接続|システムを設計する方法
- 15. Python Webサーバーでデータベース接続を維持する方法
- 16. Android - サーバーと長時間接続を維持する方法
- 17. データベースの設計:接続
- 18. Android永続ソケット接続ルール
- 19. PHPと永続的接続
- 20. サーバーから2つのクライアントを接続する方法
- 21. 多くのMySQL接続
- 22. 永続的/非永続的なコレクションフィールドを持つオブジェクトを削除する方法nullですか?
- 23. Google App Engine:サーバーとの永続的な接続
- 24. mysql永続接続のタイムアウトの変更方法
- 25. 持続的接続を開く
- 26. 永続的なTCP接続の作成/シミュレート方法は?
- 27. 永続性を持つレールのバックボーン
- 28. コアデータを持つ複数の永続ストア
- 29. 多くのデータをオブジェクトに永続化する最良の方法
- 30. 複数の資格情報を持つサーバーに接続する