Потоковая передача JSON с помощью oboe.js из gzipped ресурса - PullRequest
0 голосов
/ 22 января 2019

Я храню некоторые данные json в виде gzip-файла на сервере (чтобы уменьшить объем передаваемых данных, а также уменьшить использование диска на сервере).

Теперь я хочу распаковать и проанализировать данные json на стороне клиента (браузер, на котором запущен реакции / узел).

Я подумал, используя oboe.js и мог бы быть подходящим выбором для этой задачи. К сожалению, при работе в браузере невозможно пропустить прямой поток. Решение, к которому я прибегнул, состоит в том, чтобы передавать гобою данные после их разархивирования (см. Код в нижней части этого поста).

Несмотря на то, что это работает, браузер на некоторое время замораживается, если слушателю узла требуется некоторое время для обработки узла (конечно, для анализа данных потребуется некоторое время, но я бы хотел, чтобы приложение оставалось отзывчивым и, возможно, даже обновить представление в соответствии с уже обработанными данными).

Я подозреваю, что все данные в основном передаются на гобой сразу, вместо того, чтобы ждать, пока последний кусок не будет прочитан. Это правильно? Есть ли подходящий способ замедлить объем данных, которые передаются в oboe, или есть более прямой способ работы с gzip-stream и oboe?

var o = oboe();
var gunzip = zlib.createGunzip();

gunzip.on('data', (chunk) => o.emit('data', chunk.toString()))
      .on('end', o.emit('end'));

request(options).on('response', response => {
  o.emit('start', response.statusCode, response.headers);
  response.pipe(gunzip);
};

o.node('{name}', () => {
  //Do stuff with node
  return oboe.drop;
});

1 Ответ

0 голосов
/ 22 января 2019

Кажется, вы не можете правильно использовать функциональность трубы (например, адаптацию скорости) из-за "обертки" в строках 4-5. Просто удалите ее.

Это дополнительная информация о трубопроводе node.js

...