Рубрики
Uncategorized

Swoole websocket использует zlib для сжатия PHP и Swoole websocket использует zlib для сжатия PHP и

Автор оригинала: David Wong.

Некоторые теоретические знания

Давайте сначала поговорим об алгоритме дефляции. 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