본문 바로가기
728x90

네티8

TCP/IP 통신 네티(netty)(1) 라이브러리로 Netty를 사용해서 소켓 통신을 구현 해볼것이다. 자바의 socket 클래스를 이용해서 구현도 가능하지만 내가 사용하는 것은 네티를 이용해서 이부분을 처리하고 있어서 이부분을 정리해보겠다. 네티에서는 소켓 통신을 이용하여 클라이언트와 서버와 연결을 유지하고 BootStrap, channel, channelContextHandler 등의 클래스들을 이용하여 통신을 한다. 초기 연결시 BootStrap을 이용하여 서버와 클라이언트간 연결을 시도한다. 다만 이때 네티에서는 클라이언트와 서버는 초기 설정시 BootStrap, 이벤트처리 스레드 설정이 다르다. 서버는 serverBootstrap이라는것을 사용하고 이벤트 처리 스레드도 2개를 생성하여 클라이언트에 대한 연결과 데이터처리용으로 2개를 .. 2021. 5. 24.
netty spring start 1. 항상 맨처음 메인에서 XML 들을 로딩한다. --applicationContext = new ClassPathXmlApplicationContext("classpath*:spring/**/context-*.xml") 시작 2. XML의 가장 첫번쨰인 context-application 에서 .properties 파일 정보들을 로딩한다. 3. context-network 에서는 3-1-1. 네티의 이벤트 루프 그룹을 설정해준다. 3-1-2. bootstrap에서 사용할 채널 옵션을 설정 해준다. 3-1-3. 채널 인바운드 아웃바운드 이벤트를 처리해주는 파이프라인 초기화 클래스를 등록한다. 3-1-4. 서버 부트 스트랩 팩토리에 위의 설정들을 등록 해준다. 3-1-5. 서버 클래스(NettyTCPSer.. 2021. 5. 17.
NETTY DECODER 오늘은 netty decoder 내가 만든 것이 아닌 다른 분이 만든 것을 봤었다. 나는 맨 처음에 이것을 보고 왜 이렇게 만들었 지? 이렇게 만들면 패킷들이 모두 이어져서 들어올때 문제가 생기는 것 아닌가? 첫 번째 헤더 부분을 통과한다고 했을 때 바디부분에서 리턴을 당하면, 계속 다시 헤더부분만큼 읽는 것이 아닌가?라고 생각했었다. 하지만 내가 했던 생각을 다른 사람들이 못한다는 생각은 바보 같은 생각이고, 이러한 부분에 관해서도 당연하게 대처가 되어있었다. 이사진을 한 번 봐보겠다. 여기서 보면 반복문을 지나치면 바로 헤더 크기만큼 읽어주고 바디 부분을 통과하면 바디 크기만큼 읽어준다 나는 이런 알고리즘을 보고 이거 왜 이런 식으로 만들어졌지?라고 생각하며, 이 코드는 당연히 한 개의 패킷만 온다고.. 2021. 5. 12.
netty 초보 패킷을 받는법 전에 올렸던 자료에서 패킷을 검증하는방법은 올렸었다. 그럼 패킷을 검증하고 나서 패킷을 어떻게 해야할까? 보통은 헤더 바디 테일 부분으로 나눠져 있고 그 안에서도 여러가지 형태로 나눠져 있는데 이것은 약속되어있는 프로토콜마다 매우 다른형태이며, 그래서 이렇게 해라 저렇게 해라 라고 할수는 없지만 방법은 모두 같다. 맨 처음에 나는 패킷을 받아서 크기대로 나누라고 했을때 아니 패킷을 어떻게 크기대로 나누라는거야? 라고 생각했지만 프로토콜 문서에 보면 그 해당 패킷의 형태에 따라 몇바이트인지 모두 지정되어있다. 그럼 그 바이트 크기에 맞춰서 이것을 잘라주면 되는데 방법은 다음과 같다. 나는 패킷을 나눠줄때 이러한 방법으로 나눠줬고 처음에 있는 buffer.order는 byteordering이다 이것은 매우중.. 2021. 5. 7.
728x90