출처 : http://javawork.egloos.com/1813530
miniLZO와 zlib 두가지 압축 라이브러리로 테스트 해보았습니다.
zlib은 많이들 아실테고 miniLZO는 LZO 경량화 버젼인데 compress는 pretty fast하고 decompress는 very fast 하다는 군요. :)
아래 URL에서 받으실 수 있습니다.
miniLZO : http://www.oberhumer.com/opensource/lzo/
zlib : http://www.zlib.net/
* 간단 사용법
- compress( unsigned char* dstBuffer, unsigned long* dstBufferLen, unsigned char* srcBuffer, unsigned long srcBufferLen )
- decompress( unsigned char* dstBuffer, unsigned long* dstBufferLen, unsigned char* srcBuffer, unsigned long srcBufferLen )
- 대략 이런 형식입니다.
* 버퍼 사이즈에 따른 압축율 및 압축/해제시간 비교 (size:byte, 압축/해제 시간:ms)
size |
zlib com |
zlib decom |
zlib rate |
lzo com |
lzo decom |
lzo rate |
2046 |
0.28 |
0.06 |
0.58 |
0.10 |
0.007 |
0.92 |
1696 |
0.22 |
0.03 |
0.53 |
0.05 |
0.007 |
0.9 |
1396 |
0.20 |
0.02 |
0.5 |
0.07 |
0.006 |
0.88 |
1096 |
0.19 |
0.02 |
0.45 |
0.02 |
0.006 |
0.85 |
796 |
0.15 |
0.01 |
0.41 |
0.01 |
0.005 |
0.8 |
496 |
0.11 |
0.01 |
0.41 |
0.009 |
0.004 |
0.8 |
196 |
0.08 |
0.01 |
0.49 |
0.005 |
0.001 |
0.88 |
146 |
0.07 |
0.009 |
0.56 |
0.003 |
0.001 |
0.88 |
96 |
0.07 |
0.008 |
0.63 |
0.002 |
0.001 |
0.91 |
46 |
0.06 |
0.002 |
0.89 |
0.001 |
0 |
1.09 |
- 압축/해제에 걸리는 시간은 miniLZO가 빠르고 압축율은 zlib이 좋습니다.
- 대략 50 byte 이하의 패킷은 압축하면 추가 정보 기록으로 인해 오히려 크기가 커집니다. 패킷을 선택적으로 압축을 하는 기능이 필수일것 같습니다.
- miniLZO의 경우 효율을 기대하려면 200 byte 이상은 되어야 할듯 합니다.(0.8)
- 원래의 의도는 이동 패킷을 압축해볼 생각이었는데 보통 x/y/z를 하나의 위치로 보면 좌표값은 12 byte인데(float 3개) 이 좌표값이 16개는 들어가야 200 byte가 되니 현실성이 없을것 같습니다.
- 처음 로그인시에 사용하는 정보들(캐릭터, 인벤토리 정보)이나 기타 자주 보내지 않는 덩치큰 패킷들(200 byte이상)을 보낼때 선택적으로 사용해야 할 듯 합니다.
- 이전에 만든 MMORPG의 캐릭터, 인벤토리 정보 패킷을 보니 각각 200 byte 정도 되는군요.
- 다시 테스트 해보니 50 byte 이하의 패킷은 압축을 하면 크기가 늘어나는 것은 사실이지만 100 byte 이상의 패킷은 크기와 압축율과의 상관관계는 없어 보이네요.
'Development > 네트워크 프로그래밍' 카테고리의 다른 글
IOCP 예제 코드 (0) | 2011.08.13 |
---|---|
Graceful shutdown (0) | 2011.08.13 |
서브넷 계산 및 표현법, 192.168.0.0/32, CIDR (0) | 2011.08.13 |
[펌] IOCP를 이용한 서버 만들기 (0) | 2011.08.13 |
[펌] IOCP를 이용한 서버 만들기(소스) (0) | 2011.08.13 |