對不起模糊的問題..但我不確定問題是什麼。 我有一個節點http服務器,用於將JSON數據提供給Web應用程序。它工作的很好,但我的JSON字符串開始變大(10-12 MB),所以我想用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();
}
的與zlib的使用流和管功能HTTP服務器的例子,但我不發送文件,因爲我在生成從數據庫應用程序中的JSON數據,所以我基於便利方法的例子。到目前爲止我的故障排除我知道響應對象是好的,並且result.toString('utf8')按預期輸出gobeldy-gook。如果我不向服務器發送acccept-encoding頭文件,它會完美地發送純文本 - 所以它必須是壓縮函數。
任何人有任何想法嗎?我非常肯定,我對流,管道,緩衝區和zlib對象缺乏瞭解,這可能只是一個語法問題,所以希望有人瞭解所有這些可以幫助我:)
乾杯
我假定JSON是用於下載的,否則它可能會阻塞瀏覽器:) – 2012-04-02 03:21:35
不,它是實時地圖應用程序的位置數據。大多數瀏覽器都沒有問題。 – whiteatom 2012-05-30 12:33:41