IT한 것/Vert.X

Vertx TCP 서버에서 JSON 기반의 통신을 쉽게 하기

lovian 2021. 4. 1. 21:28

제목이 좀 별로이긴한데..

 

TCP로 통신은 하는데, 실제 데이터는 Json으로 할 생각인데, vert.x의 TCP는 NetSocket에 ReadStream<Buffer> 형식을 블록 단위로 받아서 처리하도록 되어 있다.

 

크지 않은 단순한 데이터라면 어차피 BSD Socket Write 이벤트 한번이면 충분하니 별로 작업을 안해도 되는데, 그 데이터 량이 커지는 경우 Buffer 단위의 블록을 모아서 처리해야한다.

 

이 때, Buffer 블록이 얼마나 올지 예상을 하기 어려운 경우라면, 선택을 해야한다.

고정된 데이터 길이를 붙이고, 나머지 데이터가 올때까지 읽던가

아니면, Json 형식을 실시간으로 분석하면서 Json 형식이 끝날때까지 읽던가.

 

고정된 길이를 붙이는 첫번째 방법은 자주 해보던거라, 두번째 방식을 선택해봤다.

 

vert.x에 내장된 JsonParser는 XML의 SAX 스타일의 가벼운 파서로 이것을 이용하여 JsonObject로 재구성하고, JsonObject가 완성되면 이벤트를 발생시키는 코드를 작성해보았다.

 

적당히 잘 동작하는거 같으니, 공유

https://github.com/eususu/JsonObjectParser

 

eususu/JsonObjectParser

JsonObjectParser for Vert.x TCP Server. Contribute to eususu/JsonObjectParser development by creating an account on GitHub.

github.com