일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스위프트
- 플레이프레임워크
- 주키퍼
- 스칼라 동시성
- Play2 로 웹 개발
- 스칼라
- 안드로이드 웹뷰
- 하이퍼레저 패브릭
- hyperledger fabric
- Adapter 패턴
- 파이썬 강좌
- Actor
- 파이썬 데이터분석
- 그라파나
- akka 강좌
- 파이썬
- play2 강좌
- Hyperledger fabric gossip protocol
- CORDA
- Golang
- 블록체인
- play 강좌
- Akka
- 파이썬 머신러닝
- Play2
- 하이브리드앱
- 스칼라 강좌
- 파이썬 동시성
- 엔터프라이즈 블록체인
- 이더리움
- Today
- Total
HAMA 블로그
[Netty 튜토리얼 part 1] Netty 를 소개합니다. 본문
Netty 싸이트 인용 (http://netty.io/)
Netty는 NIO 클라이언트/서버프레임워크이다. 빠르고 쉽게 네트워크 어플리케이션을 개발할수있게 해준다. TCP 와 UDP 소켓서버같은 네트워크 프로그래밍을 매우 단순하고 능률적으로 만들어준다.
Netty 는 높은 수준의 병렬 네트워킹 어플리케이션/서비스를 목적으로 만들어진 자바 라이브러리/API 이다. Netty 가 표준 Java API 들과 구분되는 뚜렷한 이유는 비동기 API 라는점이다. 이 용어는 사람마다 다르게 해석될수도있는데 논블럭킹 과 이벤트드리븐이라는 용어와 연관되어진다. 어쨋던 전에 비동기 API를 사용해보지 않았다면, Netty 를 구현함에 있어서 사고방식의 전환이 조금 필요할것이다. 비동기적으로 호출된다는것은 즉시 반환이 이루어진다는점과 리턴값이 없다는점을 염두해야한다. 받아야할 리턴값은 다른 쓰레드가 미래의 어느 시점에 되돌려 줄것이다. 이것이 일반적인 표준API 과 기본적인 차이점이다. 아래 예를 통해 잠시 살펴보자.
Standard API
public
int
getWidgetCount();
Asynchronous API
public
WidgetCountListener myListener =
new
WidgetCountListener() {
public
void
onWidgetCount(
int
widgetCount) {
......
do
your thing with the widget count
}
};
위의 getWidgetCount 함수는 int 값을 리턴하지만, 아래의 비동기 방식에서는 리턴하지 않으며 대신 응답 핸들러를 주입하게됩니다. 이 핸들러는 나중에 작업을 처리하는 쓰레드에 의해서 호출되어 질것이며, 사용자는 결과를 얻고 싶을때 가져와서 사용하게 됩니다. 보증할수없는 복잡성한 레이어를 추가한것으로 보이지만 이것은 높은성능향상을 어플리케이션과 서비스에 가져다 주게됩니다. 클라이언트는 응답을 기다리기위해 wait() 함수속에서 시간을 낭비할 필요가 없습니다. 엄마가 밥도 아직 차리지 않았는데, 멍하니 식탁에 앉아있을 필요가 없습니다. 게임하면서 놀다가 엄마가 부르면 그때 나가서 냠냠하면 된다는 이야기입니다.(실제 엄마들 처럼 미리 부르지 않습니다 ^^;;) 이런 시스템은 Selectors 라는것과 함께 사용되는데 이것은 OS 시스템과 연동되어집니다.OS 에서 준비가 완료되면 알려주며, 이런 과정은 추상화되어 개발자는 상위레벨에서 쉽게 Java NIO / Netty API 를 구현할수있게 됩니다.
이 연재에서는 기본컨셉과 코어블럭들의 이름에 대해서 소개하고, 실제 코드예제를 볼것입니다.
..번역중..
ChannelFactory
NioClientSocketChannelFactory and NioServerSocketChannelFactory
The Boss Threads
The Worker Threads
ChannelEvent
SimpleChannelHandler
ChannelFuture.
ObjectEncoder / ObjectDecoder
DateReceiver
ServerBootstrap / ClientBootstrap
messageReceived / messageEvent
Upstream and Downstream
Dynamically Modifying ChannelHandlers in the Pipeline
ChannelHandlerContext
레퍼런스
http://seeallhearall.blogspot.kr/2012/05/netty-tutorial-part-1-introduction-to.html 요약정리
'Netty, Java IO' 카테고리의 다른 글
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 |
노만 머러 인터뷰 (Netty/Vert.x) (0) | 2015.08.27 |