1

私はJava NIO2で遊んでいて、AsynchronousServerSocketChannelに基づいてTCPチャットサーバーをコーディングしようとしています。

シンプルな ECHO-Server をプログラミングすることは問題なく、問題なく動作しました。現在、多くのクライアントを受け入れ、接続されているすべてのクライアントに着信メッセージをブロードキャストしようとしていますが、問題に直面しています。

少し長くなったので、ここのコードを過去のビンに投稿しました

今までは 1 つのメッセージをブロードキャストすることができましたが、その後何か問題が発生し、しばらくすると次のエラーが表示されます。

スレッド「pool-1-thread-13」での例外 java.nio.channels.WritePendingException

4

1 に答える 1

3

スレッド「pool-1-thread-13」の例外java.nio.channels.WritePendingException

これは、前の書き込みが完了するのを待たずに書き込みを試みたことを意味します。NIO2でwrite()を呼び出すと、Futureが取得され、それが終了したことを確認するのを待つことができます。

インフィニバンド(設計されたもの)がない限り、NIO2の使用はお勧めしません。NIO2はNIOの2倍以上複雑であり、単純なブロッキングNIOまたはライブラリを使用していない限り、NIOの使用はお勧めしません。ネティやミナのように。

チャットプログラムの場合は、プレーンなNIOまたはIOを使用します。または、すでに存在して機能している多くのチャットライブラリの1つを再利用することもできます。;)

于 2013-01-03T15:52:14.190 に答える