サーバークライアントの例を使用したJavaNIO(ノンブロッキングI / O)– java.nio.ByteBufferおよびchannels.Selector – Java NIO Vs. IO

公開: 2021-08-06
サーバークライアントの例を使用したJavaNIO(ノンブロッキングI:O)-CrunchifyNIOServer.java

Java NIOは私のお気に入りのトピックです。 私は過去2年間NIOと協力してきましたが、本番環境でこのコードを自由に使用できる読者のために、単純なServer-Client codeを共有したいと思います。

JDK 1.4以降、NIOは、すべてのJavaプログラマーがカスタムネイティブコードを処理することなく非常に高速な入出力を実装できるようにするために作成されました。 NIOはjava.nio.bufferライブラリを使用します。これは、任意のオペレーティングシステムの内部でバッファをドレインおよびフィルバックする単純なI / Oと比較されます。

このチュートリアルでは、 java.nio.channelsおよびjava.nio.channels.Selectorライブラリについて説明します。

  • channelsは、ファイルやソケットなどのI / O操作を実行できるエンティティへの接続を表します。 多重化された非ブロッキングI / O操作用のセレクターを定義します。
  • selectorは、このクラスのopen methodを呼び出すことで作成できます。このメソッドは、システムのデフォルトのセレクタープロバイダーを使用して新しいセレクターを作成します。
APIの詳細を含むjava.nioパッケージの説明

below questionsがある場合は、適切な場所にいます。

  • JavaNIOの使用を開始する方法
  • JavaNIOおよびJavaNIOチュートリアルとは何ですか
  • 非同期JavaNIO
  • javanioパッケージの正確な使用法は何ですか
  • JavaNIOチュートリアル
  • JavaNIOを使用して高性能I / Oを実装する方法

始めましょう:

ステップ1

  • port 1111で接続を開くCrunchifyNIOServer.javaを作成します
  • isAcceptable()を使用して、チャネルが新しいソケット接続を受け入れる準備ができているかどうかを確認します
    • はいの場合–接続します
  • isReadable()を使用して、チャネルが読み取りの準備ができているかどうかを確認します
    • はいの場合–バッファーから読み取り、Eclipseコンソールで印刷します
  • 最後の会社名を取得したら「crunchify」
    • 接続を閉じる

ステップ2

  • port 1111でサーバーに接続しようとするCrunchifyNIOClient.javaを作成します
  • 5つの会社名でArrayListを作成します
  • ArrayListを反復処理し、各companyNameをサーバーに送信します
  • タスク終了後に接続を閉じる

このJavaコードを見てください:

サーバーコード– CrunchifyNIOServer.java


クライアントコード– CrunchifyNIOClient.java

サーバークライアントの例を使用したJavaNIO(ノンブロッキングI:O)-CrunchifyNIOClient.java

サーバー側での結果:

クライアント側での結果:


いくつかのFAQ:

  1. クライアントから、持続的接続を維持するにはどうすればよいですか?
    • socket.setKeepAlive(true);を使用できます。 クライアント側からの接続を維持します。
  2. サーバーに送信したメッセージへの応答を読み取るにはどうすればよいですか。 サーバーは10秒ごとにメッセージを生成し続けます。 リクエストへの応答を読む必要があります。 私の理解では、TCPはレコードの終わりなどではなくデータを「ストリーミング」します。
    • クライアントサーバー通信の場合、プロトコルを適切に定義する必要があります。 readLine()呼び出しは、すべてのデータが返されるまでブロックされるため、使用しないでください。 Try reading bytes from the stream until -1 is returned.

それがうまくいくかどうか教えてください。