큐를 활용한 버퍼 처리는 데이터를 일정한 순서, 즉 들어온 순서대로 유실되는 것이 없이 완벽하게 처리할 수 있는 방법이다.
큐는 데이터가 차례로 입력되고, 각 데이터를 순차적으로 내보낸다. 지금 구현중인 게임의 패킷 처리 전 패킷 송 수신 측에 큐 방식으로 관리한다면 완벽한 처리가 될 것이다.
데이터 처리 전까지 패킷을 일시적 저장할 수 있고 프로세스가 데이터를 하나씩 꺼내서 처리할 수 있기 때문에 효율적이다.
패킷 처리 큐가 버퍼 역할을 하기 때문에 각 작업을 비동기적으로 처리할 수 있다.
Node.js의 워커 스레드는 멀티 스레드 환경에서 작업 분리 및 병렬 수행처리 하는 기능이다. Node.js는 기본적으로 단일 스레드에서 실행되고, 비동기 I/O를 통해 많은 작업을 효율적으로 처리하지만 CPU를 많이 사용하는 연산에는 한계가 있다. 그럴 때 사용하면 효율적으로 처리할 수 있다고 한다.
원래, 패킷 송 수신부를 워커 스레드를 활용하여 처리하고자 했었으나 찾아보니 TCP 기본 데이터 송수신의 경우 네트워크 I/O 바운드 작업으로 기본적으로 제공하는 이벤트 루프와 비동기 I/O만으로 충분히 잘 처리가 되고 오히려 불필요한 복잡성과 오버헤드가 생길 수 있다고 한다.
이번 프로젝트에서 큐를 활용한 방법은 시도해보되 워커스레드는 사용하지 않겠다. 다만, 큐에서 패킷을 꺼내 로직을 프로세싱 하는 부분에서는 고민을 좀 해볼 필요성이 있겠다.