OctoberSkyJs 스터디에서 발표한 프레젠테이션 문서입니다.
NodeJS의 NET 모듈에 대한 소개이며, 관련 예제 링크도 공유드립니다.
[데모] - http://inpost.kr:7777/
[코드] - http://test.youngman.kr/node/ws/ws.js
7. Detail!
server.listen(port, [host], [backlog], [callback])
server.listen(path, [callback])
server.listen(handle, [callback])
: 지정된 서버(port, host, path, …)의 커넥션 연결을 시작한다. 서버가 실행되
면 ‘listening’ 이벤트가 발생되고, ‘callback’ 매개 변수는 ‘listening’ 이벤트에 대
한 리스너로서 추가된다.
Server!
8. Detail!
server.close([callback])
: 새로운 커넥션 연결을 중단하고 기존의 커넥션만 유지한다. 그리고 모든 커넥
션이 종료되었을 때 서버를 닫는다. 서버는 ‘close’ 이벤트를 발생시키고 선택적
으로 ‘close’ 이벤트를 받을 수 있는 콜백을 매개 변수로 정할 수 있다.
Server!
21. Detail!
socket.setTimeout(timeout, [callback])
: 소켓에 설정된 초과 시간이 지나면 ’timeout’ 이벤트가 발생하며, ‘callback’ 매
개 변수는 ‘timeout’ 이벤트의 리스너로서 추가된다. 참고로 ‘timeout’ 이벤트가
발생하여도 커넥션은 유지된다. 커넥션을 끊기 위해서는 사용자가 end 메소드
나 destroy 메소드를 호출해야 한다.
Socket!
29. Detail!
socket.on(event, listener)
Event Description
connect 소켓 커넥션이 설정되었을 경우
data 데이터를 받았을 경우
end 소켓이 FIN 패킷을 보냈을 경우
timeout 시간이 초과되었을 경우
error 에리가 발생할 경우
close 소켓이 닫힌 경우
Socket!
안녕하세요.NET모듈 발표자 홍재석입니다.본의아니게 지난 주에 발표임에도 불구하고 개인사정으로 불참하여 이 자리를 빌어 죄송하단 말씀을 드리겠습니다.그럼, 시작하겠습니다.
발표하기에 앞서 제가 TCP에 대한 지식이 다소 부족하여 발표가 미흡하더라도 양해 부탁드리겠으며,진행 순서는 코드의 양이 많고 깊게 분석하면 네이티브 영역까지 설명해야 되기때문에 발표 컨셉을 코드 리뷰가 아닌 넷 모듈의 구조와 API 설명 그리고 넷 모듈을 활용한 예제 시연 순으로 진행하겠습니다.
넷 모듈은 서버와 클라이언트 모두를 포함한 비동기 네트워크 관련 API를 제공합니다.
넷 모듈은 크게 두 개의 클래스와 이를 내부적으로 객체를 생성하여 리턴하는 래핑함수 그리고 아이피 버전 체크와 같은 기능을 제공하는 유틸 함수로 구성되어 있습니다. 참고로 서버 클래스는 이벤트 클래스를 상속받고, 소켓 클래스는 스트림 클래스를 상속 받습니다. 그리고 스트림 클래스는 이벤트 클래스를 상속받습니다. 결국 서버와 소켓 클래스는 이벤트 클래스의 특징을 갖고 있습니다.
참고로 동일한 기능을 하는 createConnection메소드도 있습니다.
connect == createConnection
FIN Packet이란 세션을 종료시키는데 사용되며 보낸 사람이 더 이상 보낸 데이터가 없음을 보여준다.TCP Half-close는 두 개의 스트림 중 하나만 종료하는 것을 말한다.(완전한 커넥션 종료가 아님)
Nagle 알고리즘이란 네트워크에서 “가능하면 조금씩 여러 번 보내지말고 한번에 많이 보내라”라는 원칙을 기반으로 만들어진 알고리즘입니다. 참고로 반응 속도가 중요한 온라인 게임에서는 오히려 문제가 될 수 있으며, 이를 해결하기 위해 서버는 Nagle 알고리즘을 활성화하고 클라이언트는 비활성화 하는 방법을 사용하기도 합니다. 쉽게 말해서 버퍼라고 생각하시면 되고 TCP소켓은 디폴트로 Nagle 알고리즘을 적용하고 있습니다.
발표를 준비하면서 어떤 예제를 만들어야지 여러분들이 공감을 할까라는 고민을 했었습니다.고민 중에 전성균님께서 예전에 발표하신 HTTP 관련 PPT의 끝자락에 자바로 구현된 간단한 웹 서버 예제가 있어서…그것을 넷 모듈을 사용하여 노드 버전으로 만들어보면 좋겠다라는 생각이들어 이렇게 만들어 보았습니다.코드는 50라인 정도의 매우 간단하게 구현되어있으며 HTTP 프로토콜에 대한 지식만 있다면 쉽게 이해하실 수 있습니다.참고로 MIME이라는 커스텀 모듈을 사용하였는데, 이 모듈은 파일 명을 입력하면 어떤 마임 타입인지 반환해주는 함수를 제공합니다.