Selector 및 SelectionKey 클래스 내용..

Reactor나 Proactor 패턴을 구현하기 위한 핵심 클래스가 select()를 지원하는 Selector 클래스와 이벤트 키를 가지고 있는  SelectionKey 클래스 입니다. 따라서, 위의 2개 클래스는 명확하게 알아둘 필요가 있습니다.

Selector 클래스의 주요 메서드

public static Selector open () : selector를 얻는다.
public abstract void close () : selector를 닫는다. 이때 selector가 관리중인 SelectionKey들도 모두 닫힌다.
public abstract boolean isOpen () : selector가 닫혔는지 아닌지 여부를 리턴.
public abstract Set keys () : 채널이 등록될때 생성된 SelectionKey를 java.util.Set객체로 리턴한다. Set안에 SelectionKey들이 전부 들어 있다.
public abstract Set selectedKeys () : selector가 선택한 SelectionKey를 java.util.Set객체로 리턴한다. 이들은 등록된 SelectionKey들 중에서 해당 동작(ops)이 일어난 SelectionKey들을 가리키는 것이다. 이들은 select()메서드나 selectNow()메서드가 호출된 다음에 Set 객체에 채워진다.
public abstract int select () :
public abstract int selectNow () :
-> 둘다 등록된 SelectionKey들 중에서 해당 동작(ops)이 일어난 SelectionKey들을 SelectionKey 리스트에 포함시키는 메서드로서 실제 해당 동작이 일어난 SelectionKey의 개수를 리턴한다. 이 둘의 차이점은 우선 select()인 경우 해당 동작이 일어난 SelectionKey가 하나라도 생시지 않으면 그 상태에서 블로킹이 된다. 그러나 selectNow()는 당장 해당 동작이 일어난 SelectionKey가 없어도 곧바로 리턴이 된다.
public abstract Selector wakeup () : select()가 블로킹되었을때 이를 깨워주는 메서드이다. 이때 SelectionKey의 Set에 SelectionKey가 추가되었는지 안되었는지는 알 수 없다.

 

SelectionKey 클래스의 주요 메서드

public static final int OP_ACCEPT
public static final int OP_CONNECT
public static final int OP_READ
public static final int OP_WRITE
위의 변수들은 비트값을 가진 int형 데이터로서 각각이 or연산에 의해 합해져서 어떤 동작들이 가능하거나 관심 있는지를 나타내게 된다.
public abstract int interestOps () : 해당 동작을 위의 값들로 리턴한다. 예를 들어 OP_READ|OP_WRITE 값이 리턴되었다면 읽는 것과 쓰는 동작을 취한다는 뚯이 된다. 그래서 읽거나 쓰거나 하는 동작이 취해지면 Selector에 의해 선택될 수 있게 된다.
public abstract SelectionKey interestOps (int ops) : 이는 위와는 반대로 해당 동작을 지정한다.
public final boolean isAcceptable ()
public final boolean isConnectable ()
public final boolean isReadable ()
public final boolean isWritable ()

public final Object attach (Object ob) : 채널 등록시 함께 등록될 객체(채널에 관한 정보를 담고 있는 객체)를 지정해준다. 이는 SelectableChannel클래스의 register ()메서드에서 인자 하나를 추가해서 지정해주는 것과 같다.
public final Object attachment () : attach()메서드나 register()로 추가로 지정된 객체를 리턴한다.
public abstract SelectableChannel channel () : 연결된 SelectableChannel 인스턴스를 리턴한다.
public abstract Selector selector () : 연결된 Selector 인스턴스를 리턴한다.

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.