헤더: 메시지 유형
헤더: 바디 길이
바비: 스트링
write() 연속으로 따다닥 해서 각각 바이트로 보내기
즉 헤더, 헤더, 바디, 바디, 바디 뭐 이런식으로 나눠서
vs
저거 다 하나의 바이트에 몰아박고 보내기
어차피 프로토콜로 다 약속시켜놔서 바이트 받아버림
앞에 4byte , 4byte 빼서 유형, 바디 길이 int로 바꿈
그래서 유형에 따라 바디 몇번 읽을지 체크되고
길이가 있어서 그거 체크하고 길이만큼 바디 반복으로 읽어서 스트링 바꾸면된다.
니넨 전자, 후자 뭐가 더 좋냐??
블로킹 동기식은 걍 read()하면 멈추니까 따다다닥 읽고
보낼때도 write() 순서대로 하면 순서대로 갈 수밖에 없음
그래서 편함.
근데 논블럭 비동기는 위에 처럼 쉽지가 않더라
write()를 따다다다닥 연속하면 순서 보장이 안돼
write() 하는 순간 바로 리턴되버림 그래서 write()
따다닥 써도 뭐가 더 빨리 complete() 될지 모른다.
그래서 논블럭 비동기에서 나눠서 보내려면 패킷 추가해야함
저기 헤더든 바디든 일단 맨 앞에 패킷 순서 구분할거 넣어야함 ㅇㅇ
받을때도 read()는 이벤트 반응형으로 complete()가 떠서
뭐부터 받을지 몰라
그리고 그 complete()는 패킷을 나눠서 받는거라서
패킷 조각 연결 알고리즘하고 완성 알고리즘도 나뉜다.
동시 다발적 발생이라 존나 받은거 어디다 싱글톤으로된 클래스나 뭐 자료구조든 어딘가에는 박아놔야함.
그래서 complete()뜰때마다 맨앞에 바이트 읽고 패킷순서 확인해서 순서 맞춰야함.
다 맞춰지면 그 해당하는 메시지 객체 만들고 행동 처리도 필요
그래서 논블럭 비동기는 저렇게 나눠서 힘들게 받을빠에 걍 하나의 패킷으로 몰아박기가 더 나은거같음
read()에서 complete()뜨면 결국 넘어온 ByteBuffer에서
약속된 크기로 딱딱딱 빼내면 그만이니까
그럼 그 한번 complete()뜬게 메시지 요청인거지
거기서 하나 받고 다 나눠서 필드값 설정하고 그거 처리하면 끝임
complete() 한번이 걍 메시지 하나 온거라서 쉽지
근데 나눠서 받게되면 위에 써놓은거처럼 자료구조도 써야하고 알고리즘 설계도 골치아파짐
이게 참 블로킹 동기는 뭐로 하든 상관이 없는데 말야..
비동기 존나 어떤 씹쌔끼가 처만든지는 몰라도 참 뭐같음
패킷 나중에 보내기
패킷안보내기 - dc App
ㄴ 셀렉터 형태로 쓴느거 죶같아서 못쓰겠다 논블럭 동기는 아무 메리트도 없는거같음. 논블럭 동기 쓸빠에 블로킹 동기가 나은듯 쉽고 강력함. 근데 엄청난 자유도를 원하면 논블럭 비동기인데.. 문제는 논블럭 비동기는 엄청난 선택권과 자유도가 주어지는 대신 설계가 빡세져
논블록 동기방식써라그냥
ㄴ 왜?? 패킷은 절대적으로 나누는게 좋아?
ㄴㄴ그냥통으로
근데통으로할거면 설계가좀귀찮아지지
ㄴ 왜??