Извините за неопределенный вопрос .. но я не уверен, в чем проблема. У меня есть HTTP-сервер узлов, который я использую для передачи данных JSON в веб-приложение. Он отлично работает, но мои строки JSON начинают получать большие (10-12 МБ), поэтому я хочу добавить сжатие с помощью zlib.Node.JS http-сервер с сжатием - передающая переменная в качестве ответа
Данные JSON находятся в строковой переменной, и я хочу сжать, а затем записать объект ответа ... но результаты, которые возвращаются к клиенту, всегда имеют идеальные заголовки и контент. Вот моя deliverResponse функция:
var deliverResult = function (data, response, callback, acceptEncoding){
var payload = callback + '(' + JSON.stringify(data) + ');';
if (acceptEncoding.match(/\bdeflate\b/)) {
response.writeHead(200, { 'Content-Encoding': 'deflate', 'Content-Type': 'text/javascript; charset=UTF-8' });
zlib.deflate(payload, function(err, result){
if(!err){
//console.log(result.toString('utf8')); // I have data on the console here
response.write(result.toString('utf8')); // No data sent here
}
});
} else if (acceptEncoding.match(/\bgzip\b/)) {
response.writeHead(200, { 'Content-Encoding': 'gzip', 'Content-Type': 'text/javascript; charset=UTF-8' });
zlib.gzip(payload, function(err, result){
if(!err){
response.write(result.toString('utf8'));
}
});
} else {
writelog('INFO', 'Returning data without compression\n');
response.writeHead(200, { 'Content-Type': 'text/javascript; charset=UTF-8' });
response.write(payload);
}
response.end();
}
Примеры HTTP-сервер с потоками использования Zlib и функцией трубы, но я не посылаю файл, как я генерировать данные в формате JSON в приложении из базы данных, поэтому я основываясь на примерах удобства. До сих пор я обнаружил, что объект ответа хорош, и что result.toString ('utf8') выводит gobeldy-gook, как ожидалось. Если я не отправляю заголовок шифрования на сервер, он отлично передает текст, поэтому он должен быть функциями сжатия.
У кого-нибудь есть идеи? Я уверен, что это связано с моим недостатком понимания потоков, труб, буферов и объекта zlib, и это, вероятно, просто проблема синтаксиса, поэтому, надеюсь, кто-то, кто это понимает, может мне помочь :)
Приветствия
Я предполагаю, что JSON загружен, иначе он, вероятно, choke the browser :) –
Нет, это данные о местоположении для приложения отображения в реальном времени. У большинства браузеров нет проблем с этим. – whiteatom