2012-04-01 19 views
4

曖昧な質問には申し訳ありませんが、問題の内容はよくわかりません。 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を空の応答が送信されます乾杯

+0

私はJSONがダウンロード用であると仮定します。ブラウザをチョーク:) –

+0

いいえ、それはリアルタイムマッピングアプリケーションの位置データです。ほとんどのブラウザには問題はありません。 – whiteatom

答えて

2

解決しよう....

愚かな問題..のResponse.Writeは、非同期関数内で呼び出されているので、それは(write.endをやっている)の前に...コールバックのresponse.endでresponse.writeを置き換えれば、それは完全に動作します:)

関連する問題