sgcWebSockets は WebSocket の圧縮・展開に ZLib を使用しています。最近、ZLib が新バージョンをリリースし、以下の問題が修正されました:
- Z_FIXED ストラテジー使用時に範囲外アクセスが発生する deflate バグを修正。
- deflate_stored() でウィンドウが満杯のときの deflate バグを修正。
- CRC-32 の計算速度を 1.5〜3 倍に高速化。
- ARMv8 プロセッサでハードウェア CRC-32 命令を使用。
- x のべき乗テーブルを使用して crc32_combine() を高速化。
- 高速な結合のために crc32_combine_gen() と crc32_combine_op() を追加。
ZLib の静的リンク
sgcWebSockets Enterprise Edition には ZLib を使用して .obj ファイルを静的リンクするカスタム Indy バージョンが含まれており、これらのファイルは最新の ZLib バージョンに更新されています。この修正を適用するには、最新の sgcWebSockets バージョンをダウンロードするだけです。
これがデフォルトの設定であるため、99% のユーザーにとっては sgcWebSockets のバージョンを更新するだけで十分です(sgcWebSockets 2022.4+)。
ZLib ダイナミックライブラリ
sgcWebSockets 2022.4.0 より、.obj ファイルをバイナリに静的リンクする代わりに、zlib ライブラリを動的にロードできるようになりました。
これを行うには、プロジェクトに以下の条件付きコンパイルシンボルを追加します:
SGC_DYNAMICLOAD_ZLIB
あるいは、sgcIndy.inc ファイル(ソースフォルダーに配置)を編集して以下の行を追加することもできます:
{$DEFINE SGC_DYNAMICLOAD_ZLIB}
最後に、ZLib ライブラリの場所を設定する必要があります。以下のメソッドを使用して、ライブラリが配置されているフルパス(ライブラリ名なし)を渡してください:
sgcIdZLibHeaders.IdZLibSetLibPath('c:\software\zlib');
*この設定は、ソースコード付きの sgcWebSockets Enterprise Edition のみに有効です。コンパイル済みの ZLib DLL はプライベートアカウントからダウンロードできます。
