曖昧な質問には申し訳ありませんが、問題の内容はよくわかりません。 WebアプリケーションにJSONデータを提供するために使用しているノードのhttpサーバーがあります。素晴らしいですが、JSON文字列が大きくなり始めているので(10-12 MB)、zlibで圧縮を追加したいと考えています。Node.JS圧縮されたHTTPサーバー - 応答として変数を送信する
JSONデータは文字列変数であると私は圧縮し、その後、応答オブジェクトに書き込みたい...しかし、クライアントに戻る結果は常に完璧なヘッダ、およびコンテンツのない持っているようです。ここに私のdeliverResponse機能である:zlibの使用ストリームとパイプ機能付き
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サーバの例は、私は、データベースからアプリでJSONデータを生成するように私は、ファイルを送信していないよ、私は思いますこれを便利なメソッドの例に基づいています。これまでの私のトラブルシューティングでは、応答オブジェクトが良好で、result.toString( 'utf8')がgobeldy-gookを期待どおりに出力していることが分かりました。サーバにアクセプト符号化ヘッダを送らなければ、プレーンテキストが完全に送信されるので、圧縮関数でなければなりません。
誰もがこれについて考えていますか?私はストリーム、パイプ、バッファ、zlibオブジェクトについての私の理解が不足していると確信しています。これは単なる構文上の問題なので、これをすべて理解してくれれば誰でも助けてくれます:)
Response.Writeを空の応答が送信されます乾杯
私はJSONがダウンロード用であると仮定します。ブラウザをチョーク:) –
いいえ、それはリアルタイムマッピングアプリケーションの位置データです。ほとんどのブラウザには問題はありません。 – whiteatom