태그 보관물: java.nio

Scalable IO in Java

Doug Lea 교수님께서 강의를 위해서 만들어놓은 자료입니다. 어디에서 다운로드를 받았는지 기억이 안나서 업로드 합니다.
PDF 자료를 보면, POSA2의 Reactor 패턴을 이용해서 이벤트를 디스패칭하는 내용을 기본으로, 약 3가지의 모델을 제시하고 있고, 그 중에서 Using Multiple Reactors 슬라이드 편이 멀티 프로세서 환경에서, 성능이 가장 좋아 보인다.

nio.pdf

소켓 연결 확인하기..

소켓을 기반으로 풀링을 하는 라이브러리를 개발할 시에 보통 소켓 클래스의 isconnected 라는 상태변수를 통해서 소켓의 연결상태를 확인할 수 있으나, 정확한 정보는 아니다. 그 이유가 isconnected라는 변수는, 마지막 네트웍 이벤트를 처리한 소켓의 연결 상태이기 때문이다. 그래서 확실하게 풀을 관리하기 위해서는 네트웍 이벤트를 발생시켜서 확인하는 것이 Java에서는 해결책이라고 봐야 된다. 아래의 코드로 넌 블럭(non-block) SocketChannel을 예로, read 메서드를 호출해서 결과 값으로 상태를 확인하는 코드이다.

int  readbytes = socketChannel.read(buf);
// 연결이 되어 있음..
if(readbytes == 0)
// 끊어졌네요.
if (readbytes == -1)
// 리시브된 데이타가 있네요..
if(readbytes >0)

소켓 풀링을 관리하는 매니저 클래스가 풀에 들어있는 소켓의 read 이벤트를 주기적으로 호출해보면, socket의 연결상태를 잘 유지할 수 있을 것입니다. ^^