천사소녀 네티

일지 2016. 2. 10. 23:38

네티란, 

비동기/이벤트 기반 네트워크 프레임워크이다. 네티가 없다고 해서 자바로 네트워크 프로그래밍을 할 수 없는 것은 아니지만 말 그대로 그것을 편하게 해주기 위한 프레임워크~




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
Posted by 썬,더 호글
,