글
정보를 찾아보니 3rd 파티에서 iocp를 구현한 라이브러리를 판다고는 하는데..
java.nio.channels
클래스 SocketChannel
스트림형 접속 소켓용의 선택 가능 채널입니다.
소켓 채널은, 접속 네트워크 소켓의 완전한 추상화가 아닙니다. 소켓 옵션의 바인드, 종료, 및 조작은,socket
메소드 호출에 의해 취득한 관련 Socket
객체를 개입시켜 실시할 필요가 있습니다. 임의의 기존 소켓의 채널을 작성하거나 소켓 채널에 관련한 소켓으로 SocketImpl
객체를 사용하도록(듯이) 지정할 수 없습니다.
소켓 채널은, 이 클래스의 open
메소드중 1 개(살)을 호출하는 것에 의해 작성할 수 있습니다. 새롭게 작성된 소켓 채널은 오픈입니다만, 접속은 확립되어 있지 않습니다. 미접속의 채널에 대해서 입력 조작을 호출하려고 하면(자),NotYetConnectedException
가 throw 됩니다. 소켓 채널을 접속하려면 , 그 connect
메소드를 호출합니다. 접속된 소켓 채널은, 클로즈 할 때까지 접속된 채로 있습니다. 소켓 채널이 접속되고 있을지 어떨지는,isConnected
메소드의 호출에 의해 판단할 수 있습니다.
소켓 채널은 「비블록 접속」을 지원합니다. 소켓 채널의 작성과 원격 소켓에의 링크의 확립 프로세스는 connect
메소드에 의해 개시되어 나중에finishConnect
메소드에 의해 완료합니다. 접속 조작이 실행중일지 어떨지는,isConnectionPending
메소드의 호출에 의해 판단할 수 있습니다.
소켓 채널의 입력측과 출력측은, 실제로 채널을 클로즈 하는 일 없이, 따로 따로 「정지」됩니다.관련 소켓 객체의 shutdownInput
메소드를 호출해 채널의 입력측을 정지한 뒤, 한층 더 채널을 읽어내려고 하면(자), 스트림의 마지막을 나타내는 -1 이 돌려주어집니다. 관련 소켓 객체의 shutdownOutput
메소드를 호출해 채널의 출력측을 정지한 뒤, 한층 더 채널에 기입하려고 하면(자),ClosedChannelException
가 throw 됩니다.
소켓 채널은,Channel
클래스로 지정되고 있는 비동기 클로즈 조작과 자주(잘) 닮은 「비동기 정지」를 지원합니다. 한편의 thread가 소켓의 채널에 대한 read 조작의 도중에 블록 되고 있는데, 이제(벌써) 한편의 thread가 소켓의 입력측을 정지했을 경우, 블록 된 thread의 read 조작은, 바이트를 일절 읽어내는 일 없이 종료해,-1 를 돌려줍니다. 한편의 thread가 소켓의 채널에 대한 기입 조작의 도중에 블록 되고 있는데, 이제(벌써) 한편의 thread가 소켓의 출력측을 정지했을 경우, 블록 된 thread는 AsynchronousCloseException
를 받습니다.
소켓 채널은, 복수의 병행 thread로 안전하게 사용할 수 있습니다. 데이터 그램 채널은 병행 read 및 기입을 지원합니다. 다만, read를 실시하는 thread도 기입을 실시하는 thread도 특정의 시점에서는 항상 1 개 이하입니다. connect
메소드와 finishConnect
메소드는 서로 동기 하고 있어, 어느 쪽인지 한편의 메소드의 호출중에 읽어들여 또는 기입해 조작을 개시하려고 하면(자), 이 처리는 최초의 호출이 완료할 때까지 블록 됩니다.
=>명세 요약
1.소켓 채널 생성하려면 open() 사용
2.알아서 connect()
3.비동기 i/o
4.스레드 사용 가능
static SocketChannel | open (SocketAddress remote) 소켓 채널을 오픈해, 원격 주소에 접속합니다. |
long
read (ByteBuffer [] dsts)
이 채널의 바이트 순서가 지정된 버퍼에 읽어들입니다.
long
write (ByteBuffer [] srcs)
이 채널의 바이트 순서가 지정된 버퍼로부터 써냅니다.
클래스 java.nio.channels.spi. AbstractSelectableChannel 로부터 상속된 메소드 |
---|
blockingLock , configureBlocking , implCloseChannel , implCloseSelectableChannel , implConfigureBlocking , isBlocking , isRegistered , keyFor ,provider , register |
클래스 java.nio.channels. SelectableChannel 로부터 상속된 메소드 |
---|
register |
클래스 java.nio.channels.spi. AbstractInterruptibleChannel 로부터 상속된 메소드 |
---|
begin , close , end , isOpen |
클래스 java.lang. Object 로부터 상속된 메소드 |
---|
clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait |
인터페이스 java.nio.channels. Channel 로부터 상속된 메소드 |
---|
close , isOpen |
<서버용>
java.nio.channels
클래스 ServerSocketChannel
'개인 프로젝트 관련 고민들 > nio채팅' 카테고리의 다른 글
첩.첩.산.중 (0) | 2014.01.01 |
---|---|
클래스 설계 조각 (0) | 2014.01.01 |
nio 참고 자료 + 프로젝트 깨달음 (0) | 2014.01.01 |
판단 오류2개 + 고민 3가지 (0) | 2014.01.01 |
nio패키지를 활용한 채팅서버 프로젝트 ver 0.11 (클라 개발중) (0) | 2014.01.01 |
RECENT COMMENT