Некоторые теоретические знания
Давайте сначала поговорим об алгоритме дефляции. Deflate-это алгоритм по умолчанию для сжатых файлов zip. На самом деле, deflate используется не только в zip-файлах, но и в 7z, XZ и других сжатых файлах. На самом деле deflate-это всего лишь алгоритм сжатия потоков данных, который можно использовать везде, где требуется сжатие потоковой передачи.
Другими словами, формат zlib и формат gzip являются форматами файлов, а deflate-это алгоритм сжатия, используемый этими форматами файлов.
режим передачи
Дефляция является двоичной после сжатия. Обычно существует два режима передачи:
- Двоичная система
- Кодировка Base64
Двоичная система
PHP
//Compression, note: the zlib? Encoding? Deflate parameter cannot be less $data = gzdeflate(json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), 6, ZLIB_ENCODING_DEFLATE); //Send in binary mode using swoole $webSocket->push($fd, $data, WEBSOCKET_OPCODE_BINARY);
язык JavaScript
//Message event
ws.onmessage = function(e) {
// before conversion
console.log(e.data);
//Start conversion
var blob = e.data;
var reader = new FileReader();
reader.readAsBinaryString(blob);
reader.onload = function (evt) {
var data = pako.inflate(evt.target.result, { to: 'string' })
// after conversion
console.log(JSON.parse(data))
};
};Кодировка Base64
Обычно этот метод не используется в websockets, но он используется в интерфейсах или других текстовых передачах.
PHP + JavaScript
Фреймворк Swool websocket
Структура разработки websocket на основе swool в Amway: смешайте php