서버-클라이언트가 있는 Java NIO(비차단 I/O) 예제 – java.nio.ByteBuffer 및 channel.Selector – Java NIO Vs. IO

게시 됨: 2021-08-06
서버-클라이언트가 있는 Java NIO(비차단 I:O) 예제 - CrunchifyNIOServer.java

Java NIO 는 내가 가장 좋아하는 주제입니다. 저는 지난 2년 동안 NIO와 함께 일해 왔으며 프로덕션 환경에서 이 코드를 자유롭게 사용할 수 있는 독자들을 위해 간단한 Server-Client code 를 공유하고 싶습니다.

JDK 1.4부터 NIO는 모든 Java 프로그래머가 사용자 정의 네이티브 코드를 처리하지 않고도 초고속 입출력을 구현할 수 있도록 만들어졌습니다. NIO는 내부적으로 모든 운영 체제에서 버퍼를 비우고 채우는 단순 I/O와 비교하여 java.nio.buffer 라이브러리를 사용합니다.

이 튜토리얼에서는 java.nio.channelsjava.nio.channels.Selector 라이브러리를 살펴보겠습니다.

  • channels 은 파일 및 소켓과 같은 I/O 작업을 수행할 수 있는 엔터티에 대한 연결을 나타냅니다. 다중화, 비차단 I/O 작업을 위한 선택기를 정의 합니다.
  • 이 클래스의 open method 를 호출하여 selector 를 만들 수 있으며, 이 메서드는 시스템의 기본 선택기 공급자를 사용하여 새 선택기를 만듭니다.
API 세부 정보가 포함된 java.nio 패키지 설명

below questions 이 있는 경우 올바른 위치에 있습니다.

  • Java NIO를 시작하는 방법
  • Java NIO 및 Java NIO 튜토리얼이란 무엇입니까?
  • 비동기 자바 NIO
  • java nio 패키지의 정확한 용도는 무엇입니까?
  • 자바 NIO 튜토리얼
  • Java NIO로 고성능 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

서버-클라이언트가 있는 Java NIO(비차단 I:O) 예제 - CrunchifyNIOClient.java

서버 측 결과:

클라이언트 측 결과:


몇 가지 자주 묻는 질문:

  1. 클라이언트에서 어떻게 지속적인 연결을 유지합니까?
    • socket.setKeepAlive(true); 클라이언트 측에서 연결을 유지합니다.
  2. 서버에 보낸 메시지에 대한 응답을 어떻게 읽습니까? 서버는 10초마다 메시지를 계속 생성합니다. 내 요청에 대한 응답을 읽기만 하면 됩니다. 내가 이해하는 바에 따르면 TCP는 레코드 끝 대신 데이터를 "스트리밍"합니다.
    • 클라이언트 서버 통신을 위해서는 프로토콜이 잘 정의되어 있어야 합니다. readLine() 호출은 모든 데이터가 반환될 때까지 차단되므로 사용하지 마십시오. Try reading bytes from the stream until -1 is returned.

작동하는지 알려주세요.