私は過去数日間、Javaソケットサーバーを構築する際のioとnioの違いについて読んでいました。私の使用には、多くの接続を実行できるサーバーが必要であり、そのトリックを実行することになっています。私の唯一の恐れは、接続ごとにスレッドを実行する代わりに、実装が少し遅く、少し難しいことです。だから私はなぜ私が同じ簡単なスレッドとjava.nioのロジックを使用して、サーバーを構築するのではないかと思いました。サーバーには、開いているすべての接続をチェックするスレッドがあり、新しいイベントが発生すると、それを処理するための新しいスレッドが開きます。 。私はそのように私は両方の世界を楽しんでいると思います...あなたは何を提案しますか?
2 に答える
1つのスレッドだけを使用するというNIOのポイントを理解していないことをお勧めします。それは確かに複雑であり、1000クライアント、おそらく10,000、場合によっては100,000未満のクライアントでそれが必要かどうかは議論の余地があります。サーバーを実行するためにjava.netを実装し、フェーズ2に到達して、本当に必要であることを証明した場合は、フェーズ2のためにjava.nioを保存します。
編集:私は確かにあなた自身を転がすというこの概念を忘れるでしょう。あなたはこのタスクを大幅に過小評価しており(Sun 1.4.0、1.4.1、1.4.2が実際に正しく機能するまでにかかった)、両方の世界で最悪の事態を迎えることを目指しているようです。Sunがjava.nioで行った以上のことはないので、それ以上のことはできません。おそらく少し少ない;-)
NIOはほぼ完全にJNIに依存しているため、NIOを再度実装する場合は、実際に大量のC/++およびOSAPIインターフェイスコードを作成する必要があります。
既存のJava実装はすでにかなり良いと思います。たとえば、Selectorクラスは、複数のファイル記述子を待機するためのシステムコールをラップします。その効率を改善するためにできることはほとんどありません。