Hello, Freakin world!

[Java][NIO] channel 객체를 Selector 객체에 등록하는 경우 본문

프로그래밍 언어/Java

[Java][NIO] channel 객체를 Selector 객체에 등록하는 경우

johnna_endure 2020. 3. 14. 04:43

Selector에 등록하는 방법

 

방법 자체는 간단한다.

SelectableChannel 클래스를 구현한 클래스의 객체들은 register() 메서드를 이용해 selector에 등록이 가능하다.

 

주의 사항

 

1. selector의 key set에 채널이 등록될 때, 채널 객체의 참조값이 키값이 된다. 따라서 targetChannel.register()에서 target이 같다면 register 메서드에 파라미터를 다르게 주면서 여러번 호출하더라도 마지막 파라미터를 값을 가진 채널이 등록된다. (중요!)

 

2. selected-key set은 key set의 경우와 다르다. 이 set에서 식별키는 interest op 값과 채널의 참조값인듯하다.

selection 작업 후 key set에 같은 참조값의 채널이 있더라도 interest op 값이 다르다면 등록된다.

 

3. register 메서드에 interest op 값을 줄때, 비트연산으로 두 개 이상의 interset op을 넘길 수 있다.

selection 후, 각각의 interset op는 분리되어 각각 selected-key set에 저장되는 듯하다.

 

 

Comments