헤더: 메시지 유형
헤더: 바디 길이
바비: 스트링


write() 연속으로 따다닥 해서 각각 바이트로 보내기
즉 헤더, 헤더, 바디, 바디, 바디 뭐 이런식으로 나눠서

vs

저거 다 하나의 바이트에 몰아박고 보내기
어차피 프로토콜로 다 약속시켜놔서 바이트 받아버림

앞에 4byte , 4byte 빼서 유형, 바디 길이 int로 바꿈
그래서 유형에 따라 바디 몇번 읽을지 체크되고
길이가 있어서 그거 체크하고 길이만큼 바디 반복으로 읽어서 스트링 바꾸면된다.


니넨 전자, 후자 뭐가 더 좋냐??



블로킹 동기식은 걍 read()하면 멈추니까 따다다닥 읽고
보낼때도 write() 순서대로 하면 순서대로 갈 수밖에 없음
그래서 편함.


근데 논블럭 비동기는 위에 처럼 쉽지가 않더라
write()를 따다다다닥 연속하면 순서 보장이 안돼

write() 하는 순간 바로 리턴되버림 그래서 write()
따다닥 써도 뭐가 더 빨리 complete() 될지 모른다.

그래서 논블럭 비동기에서 나눠서 보내려면 패킷 추가해야함
저기 헤더든 바디든 일단 맨 앞에 패킷 순서 구분할거 넣어야함 ㅇㅇ


받을때도 read()는 이벤트 반응형으로 complete()가 떠서
뭐부터 받을지 몰라

그리고 그 complete()는 패킷을 나눠서 받는거라서
패킷 조각 연결 알고리즘하고 완성 알고리즘도 나뉜다.

동시 다발적 발생이라 존나 받은거 어디다 싱글톤으로된 클래스나 뭐 자료구조든 어딘가에는 박아놔야함.

그래서 complete()뜰때마다 맨앞에 바이트 읽고 패킷순서 확인해서 순서 맞춰야함.

다 맞춰지면 그 해당하는 메시지 객체 만들고 행동 처리도 필요


그래서 논블럭 비동기는 저렇게 나눠서 힘들게 받을빠에 걍 하나의 패킷으로 몰아박기가 더 나은거같음

read()에서 complete()뜨면 결국 넘어온 ByteBuffer에서
약속된 크기로 딱딱딱 빼내면 그만이니까

그럼 그 한번 complete()뜬게 메시지 요청인거지
거기서 하나 받고 다 나눠서 필드값 설정하고 그거 처리하면 끝임

complete() 한번이 걍 메시지 하나 온거라서 쉽지

근데 나눠서 받게되면 위에 써놓은거처럼 자료구조도 써야하고 알고리즘 설계도 골치아파짐


이게 참 블로킹 동기는 뭐로 하든 상관이 없는데 말야..

비동기 존나 어떤 씹쌔끼가 처만든지는 몰라도 참 뭐같음