일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Golang
- 파이썬 머신러닝
- 이더리움
- 그라파나
- 스칼라 동시성
- 스위프트
- Play2 로 웹 개발
- 하이퍼레저 패브릭
- 스칼라
- 하이브리드앱
- akka 강좌
- 엔터프라이즈 블록체인
- CORDA
- 주키퍼
- 블록체인
- 안드로이드 웹뷰
- Actor
- Akka
- 스칼라 강좌
- hyperledger fabric
- Adapter 패턴
- 파이썬
- play2 강좌
- 파이썬 데이터분석
- Play2
- 파이썬 강좌
- Hyperledger fabric gossip protocol
- 플레이프레임워크
- 파이썬 동시성
- play 강좌
- Today
- Total
HAMA 블로그
Java OIO 와 NIO 쓰레드/시퀀스 모형도 본문
JAVA OIO
그림에 있는 순서대로 흘러가면 됩니다.
- 서버쪽에서는 Accept 를 통해 클라이언트의 접속을 기다리며
- 접속이 되면 , 해당 클라이언트만을 위한 쓰레드를 생성합니다.
- 그 후 클라이언트는 그 쓰레드와 통신을 하게됩니다.
- 결국 클라이언트 만큼 쓰레드가 서버에 생성됩니다.
JAVA NIO
- 위 그림의 Java NIO 서버는 Hadoop 이라는 오픈소스 코어에서 가져왔습니다.
- 클라이언트측은 OIO (Old Input/Output) 이며, 서버는 NIO (New input /output) 입니다.
- 셀렉터, 채널 , 바이트버퍼의 개념을 알아야 이해할수있습니다.
- 보시다시피 굉장히 복잡하기때문에 , 스스로 만드는것 보다는 오래 검증된 라이브러리 (Netty) 같은것을
사용하는편이 안전합니다.
- 클라이언트와 쓰레드 갯수와 무관해집니다.
위의 그림은 오프라인 스터디용으로 작성하였기때문에, 여기에 구체적인 설명은 하지 않겠습니다. ^^
P.S
TCP 는 연결지향이지만 메세지의 끝이 불분명하기때문에 양측에서 메세지의 처음과 끝을 약속하여 처리합니다.
- 문자열을 보낼때, 라인단위로 보냅니다. 그러면 수신측에서는 /n 을 발견할때까지 읽어서 처리합니다.
- /n 를 하나의 메세지의 끝으로 약속했을때, 메세지 안에 바이너리 데이터가 있다면 Base64 등으로 문자인코딩함.
- 처음 4바이트를 읽어서, 메세지의 길이를 확인한후에 길이만큼 바이트를 읽습니다. ( 위에 하둡에서 이렇게 처리)
- sync:cmd:datal-length:-------- data ------------:endSync 이런식으로 완전한 패킷정의
'Netty, Java IO' 카테고리의 다른 글
네티로 만들어진 오픈소스들 (0) | 2015.09.28 |
---|---|
Netty 버전 별 차이점 정리 (0) | 2015.09.04 |
Netty 3.1 한글 문서 (0) | 2015.09.03 |
천사소녀 Netty in Action (0) | 2015.09.03 |
[Netty 튜토리얼 part 2] Netty 에서 Channel Handlers 과 Channel Options (0) | 2015.09.02 |