더 빠른 WebSocket 압축

· 기능

WebSocket 압축은 JSON 페이로드 같은 반복적인 데이터를 전송할 때 특히 대역폭을 줄이고 응답성을 향상시키는 데 필수적이에요. permessage-deflate 확장은 모든 WebSocket 프레임을 즉석에서 압축하지만, 압축 속도는 애플리케이션의 처리량에 직접적인 영향을 미쳐요.

sgcWebSockets 2026.4.0부터 permessage-deflate 구현이 훨씬 빠른 성능을 위해 완전히 다시 작성됐어요. 벤치마크에서 소형 메시지의 압축 및 해제가 최대 15배 빨라졌으며, 모든 페이로드 크기에서 측정 가능한 성능 향상이 있어요.

무엇이 바뀌었나요?

이전 구현은 모든 단일 WebSocket 프레임에서 압축 엔진을 초기화하고 삭제했어요. 이는 단 1 KB 메시지도 압축기를 설정하고, 데이터를 압축하고, 모든 것을 해제하는 전체 비용을 지불한 뒤 다음 메시지에서 전체 과정을 반복해야 했다는 의미예요.

새 구현은 프레임 전체에서 압축 엔진을 활성 상태로 유지해요. 첫 번째 프레임이 도착할 때 한 번 초기화되고 연결 수명 동안 재사용돼요. 이렇게 하면 프레임별 설정 오버헤드가 제거되고 엔진이 이전 메시지에서 학습할 수 있어 반복적인 데이터 패턴을 더 빠르게 압축해요.

지속적인 압축 컨텍스트 외에도 새 구현에는 몇 가지 최적화가 포함돼 있어요:

벤치마크 결과

각 메시지 크기에 대해 10,000회의 압축 + 해제 왕복을 실행했어요. 매 왕복은 JSON 페이로드를 압축한 후 다시 해제하고 출력이 원본과 일치하는지 확인해요. 테스트는 Delphi 12 Athens로 컴파일된 Windows 64비트 머신에서 수행됐어요.

기본 설정 (지속적 컨텍스트)

이는 압축 컨텍스트가 프레임 전체에서 유지되는 기본 모드로, 가장 일반적인 실제 시나리오예요:

메시지 크기 이전 (ms) 신규 (ms) 속도 향상
1 KB 437 ms 28 ms 15.6배 빠름
4 KB 480 ms 88 ms 5.5배 빠름
16 KB 546 ms 431 ms 1.3배 빠름
64 KB 1,994 ms 1,725 ms 1.2배 빠름

NoContextTakeOver 사용 시 (독립 프레임)

NoContextTakeOver가 활성화되면 각 프레임이 독립적으로 압축돼요. 이 모드에서도 버퍼 재사용 및 직접 메모리 접근 최적화가 상당한 개선을 제공해요:

메시지 크기 이전 (ms) 신규 (ms) 속도 향상
1 KB 149 ms 75 ms 2.0배 빠름
4 KB 173 ms 100 ms 1.7배 빠름
16 KB 302 ms 228 ms 1.3배 빠름
64 KB 1,216 ms 1,094 ms 1.1배 빠름

누가 가장 혜택을 받나요?

개선 효과는 많은 소형 메시지를 교환하는 애플리케이션에서 가장 극적이에요. 이는 일반적인 WebSocket 사용 사례와 정확히 일치해요:

채팅 & 메시지
짧은 텍스트 메시지(일반적으로 4 KB 미만)에서 가장 큰 향상을 볼 수 있어요: 5~15배 빠른 압축.
실시간 데이터 피드
대시보드, 주식 시세, IoT 센서의 JSON 업데이트는 속도와 반복 패턴을 학습하는 지속적 컨텍스트 모두에서 혜택을 받아요.
게임 & 멀티플레이어
빈번한 소형 상태 업데이트가 낮은 프레임별 오버헤드의 혜택을 받아요.
고동시성 서버
프레임당 CPU 시간이 줄어들어 서버가 더 많은 동시 연결을 처리할 수 있어요.

완전한 호환성

최적화는 완전히 투명하게 이루어져요. 애플리케이션에서 코드 변경이 필요하지 않아요. 전송되는 압축 데이터는 이전 버전과 동일하므로 업그레이드된 서버가 기존 클라이언트와 원활하게 작동하고 그 반대도 마찬가지예요.

새 구현은 모든 플랫폼과 컴파일러를 지원해요:

2026.4.0으로 업그레이드하기

permessage-deflate 최적화는 sgcWebSockets 2026.4.0에서 사용할 수 있어요. 최신 버전으로 업데이트하기만 하면 WebSocket 연결이 자동으로 더 빠른 압축의 혜택을 받아요. esegece.com에서 다운로드하세요.

이 작업에 영감을 준 초기 최적화 구현을 기여해 주신 Michael에게 특별히 감사해요. 지속적인 zlib 컨텍스트와 직접 메모리 접근에 대한 그의 연구가 이번 성능 개선의 토대가 됐어요.