LEN

OKex, huobi `Websocket` 数据解压缩踩坑
今天业务上需要对接下 okex 和 huobi 的 websocket 服务.坑不少 之前 币安 对接遇到个 pi...
扫描右侧二维码阅读全文
26
2019/11

OKex, huobi `Websocket` 数据解压缩踩坑

今天业务上需要对接下 okexhuobiwebsocket 服务.

坑不少 之前 币安 对接遇到个 ping&pong包的问题 Webscocket pong 包 php 踩坑实例

今天对接okex 发现官方的demo 没有我大PHP. 太过分了~

新来的同学通过golang demo 找到 golang中compress/flate包 这篇文章找到下面内容:

维基百科给出的解释是:DEFLATE是同时使用了LZ77算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。它最初是由菲尔·卡茨(Phil Katz)为他的PKZIP软件第二版所定义的,后来被RFC 1951标准化。

通过 百度 搜索 PHP DEFLATE 数据压缩算法 内容如下:

LZ77: 是一种基于字典的无损数据压缩算法(还有 LZ78, LZW 等)

deflate: 也是一种数据压缩算法,实际上就是先用 LZ77 压缩,然后用霍夫曼编码压缩

gzip: 是一种文件结构,也可以算一种压缩格式,通过 defalte 算法压缩数据,然后加上文件头和adler32校验

zlib: 是一个提供了 deflate, zlib, gzip 压缩方法的函数库;也是一种压缩格式(用 deflate 压缩数据,然后加上 zlib 头和 CRC 校验)

代码示例 我处理了一下 :

<?php

$string = "11aa@#@23123szadler32adler32adler32f..adler32adler32";
$level = 9;

echo "字符串长度:", strlen($string), PHP_EOL;

$zlib = gzcompress($string, $level);
echo "gzcompress 压缩后长度:", strlen($zlib), PHP_EOL;

/*
    78da 3334 4c4c 7450 7630 3236 3432 2eae
    4a4c c949 2d32 3642 a5d2 f4f4 5005 00a7
    2c10 93
*/

$src_zlib = substr($zlib, 2, -4);
echo "zlib还原: " . gzinflate($src_zlib);

内容实际上很多. 3中压缩方式 我就只是挑了对我有用的一种 gzinflate. okexws 解压 通过 gzinflate 函数解压即可.

PHP中存在一组看起来很像的压缩解压函数:

压缩函数:gzcompress gzdeflate gzencode

解压函数:gzuncompress gzinflate gzdecode

原文地址 : zlib,gzip和deflate格式分析之php相互转换

最后修改:2019 年 11 月 26 日 11 : 23 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论