에코워커를 좀 더 자세히 살펴보겠습니다. 에코 작업자 구현은 두 번째 스레드로 구현됩니다. 이 예제에서는 단일 작업자 스레드만 사용할 수 있습니다. 즉, 이벤트를 직접 전달할 수 있습니다. 인스턴스에서 메서드를 호출하여 이 작업을 수행합니다. 이 메서드는 로컬 큐에서 이벤트를 숨기고 사용 가능한 작업이 있음을 작업자 스레드에 알립니다. 말할 필요도 없이, 작업자 스레드 자체는 이벤트가 도착하기를 기다리는 루프에 앉아 있을 것이고 언제 처리될 것입니다. 이 경우 이벤트는 데이터 패킷일 뿐입니다. 우리가 할 일은 그 패킷을 보낸 사람에게 다시 에코하는 것입니다. 이전 섹션에서 얻은 지식을 강화하기 위해 완전한 클라이언트-서버 예제를 구축할 것입니다. 이 예제에서는 연결이 “수락”될 때 관심을 등록한 것을 알 수 있습니다.

채널은 특정 이벤트에 대한 준비가 완료되었다고 고객에게 알리는 특정 이벤트를 발생시면 됩니다. 예를 들어 채널이 다른 서버에 성공적으로 연결되면 “연결”이 완료됩니다. 들어오는 서버의 연결을 수락할 준비가 된 모든 채널은 “수락”할 준비가 되었습니다. 채널에 읽을 데이터가 있으면 “읽기” 읽기라고 합니다. 마지막으로 데이터를 쓸 준비가 된 채널은 “쓰기” 준비가 되었습니다. Charset은 이름으로 Charset을 찾고, 코더(인코더 또는 디코더)를 만들고, 기본 Charset을 가져오는 다른 유틸리티 메서드를 제공합니다. 일반적으로 ByteBuffer 및 String을 사용하여 작업하는 경우 예제의 경우와 마찬가지로 기본 Charset은 명시적으로 지정하지 않는 경우 일반적으로 사용하는 것입니다. 이것은 대부분의 시간을 충분할 것입니다.

예제는 먼저 ServerSocketChannel을 만들고 수락 작업을 위해 선택기와 등록하고 채널 준비 상태를 반복적으로 확인합니다. 클라이언트 요청이 있는 경우 ServerSocketChannel에서 SocketChannel을 받고 읽기 작업을 위해 선택기와 등록합니다. 읽기 작업에 대 한 SocketChannel의 준비 에 대 한 확인, 클라이언트에서 입력을 읽고 응답을 보냅니다. 이 게시물에서는 Java IO를 사용하여 한 줄로 파일을 읽고 줄의 일부 작업을 수행하는 일상적인 프로그래밍에서 매우 유용한 작업의 예를 제공합니다. 앞으로 이동하기 전에,이 게시물의 모든 예제에서 읽을 파일 내용을 언급 할 수 있습니다. get() 을 넣은 직후에 호출하면 첫 번째 문자를 얻지 않습니다. 아래 예에서, 배치 후, 위치는 5로 설정된다. 버퍼에서 get()을 호출하면 빈 char 값이 부여됩니다. 비차단 IO 구성 요소를 만들어 선택기, 선택 가능한 채널 및 선택 키를 사용하는 방법을 살펴보겠습니다. 이 예제에서는 ServerSocketChannel 및 SocketChannel을 사용하여 클라이언트 연결을 수락하고 요청을 처리하고 클라이언트에 대한 응답을 보내는 멀티플렉싱 서버를 만듭니다.