네티란,
비동기/이벤트 기반 네트워크 프레임워크이다. 네티가 없다고 해서 자바로 네트워크 프로그래밍을 할 수 없는 것은 아니지만 말 그대로 그것을 편하게 해주기 위한 프레임워크~
1.
- Discard 서버 : 데이터를 받을 뿐 응답하지 않는다.
- handler: 메인 서버 내에서 응답을 하는 것을 핸들러
* 데이터 이동의 방향성
- 데이터 송신: outbound
- 데이터 수신: inbound
방향성을 서술하는 기준은 어플리케이션의 소켓 채널을 기준으로 정의된다.
이미지 첨부
2.
* 동기와 비동기
- 동기: 하나의 요청을 보냈을 때 그 응답이 서버로부터 다 처리되어 돌아올 때까지 그 응답을 기다리는 것.
- 비동기: 하나의 요청을 보냈을 때/ 그 응답이 서버로부터 다 처리되기 전에 호출 종료가 된 것으로 인지하고 그 응답으로 돌려준 티켓을 가지고 있는다. 실제로 모든 응답이 처리된 후에 티켓을 가지고 다시 요청을 보내서 결과를 확인할 수 있다.
* 블로킹과 논블로킹
- 블로킹: 요청한 작업이 성공하거나 에러가 발생하기 전까지는 응답을 돌려주지 않는 것.
- 논블로킹: 요청한 작업의 성공여부와 상관없이 바로 결과를 돌려주는 것.
** 자바에서의 블로킹/ 논블로킹 소켓
블로킹 소켓 : ServerSocket / Socket
논블로킹 소켓 : ServerSocketChannel / SocketChannel (1.4 자바부터 N논블로킹IO를 지원)
- 블로킹 소켓의 경우 한번에 다중 클라이언트의 접속처리가 불가능.
- 그래서 서버소켓의 accept기능을 이용해서 한번 연결이 맺어질 때마다 스레드를 생성해서 그 스레드가 일하도록 일을 넘겨줌
- 요렇게 되면 서버소켓의 accept메소드가 병목지점이 됨.
- 병목을 보완하기 위해서 스레드 풀을 사용
<스레드풀 단점>
- 스레드 풀을 넘치게 사용하면 대기가 오래 걸리는 단점
- 가비지 컬렉션이 많이 발생
- 컨텍스트 스위팅 많이 발생.
* 논블로킹 소켓
- Selector의 등장
- 서버 소켓채널을 셀렉터에 등록해서 event 가 발생하면 셀렉터에서 서버 소켓 채널에 이벤트가 감시했는지 조회하고, 그 이벤트에 적합한 이벤트를 실행시켜준다.
- 즉 셀렉터에 여러 클라이언트가 채널로 연결되고, 어떠한 채널에서 이벤트가 발생했을 때 셀렉터가 해당하는 이벤트를 실행시켜주는 것.
* 이벤트 기반 네트워크 프로그래밍
- 이벤트가 발생하는 곳: 소켓
- 발생할 이벤트의 종류: 소켓 연결, 데이터 송수신
** 흐름
---------------
- 클라이언트 소켓에서 데이터를 쓰기(데이터 핸들러)-> 아웃바운드 프롬 클라이언트
-> 인바운드 투 서버 ->
서버소켓에서 데이터를 읽기(데이터 핸들러) ->
...처리...
-> 서버 소켓에 데이터 쓰기(데이터 핸들러 ) -> 아웃바운드 프롬 서버 ->
인바운드 투 클라이언트 ->
클라이언트 소켓 데이터 읽기(데이터 핸들러 )
-----
'일지' 카테고리의 다른 글
intelliJ에서 live template 생성할 때 유의해야 하는 점들 정리 (0) | 2016.02.23 |
---|---|
git remote branch delete (0) | 2016.02.19 |
천사소녀 네티 6장 (0) | 2016.02.17 |
천사소녀 네티 2 (0) | 2016.02.11 |
nerd commenter (0) | 2016.01.28 |