2012-01-10 9 views
0

私が書いたGZIPFilterを通過するようにJSONストリーミングを変換しようとしています。今まで私はそれを伝えたらフラッシュするようにフィルタを調整することができ、互換性のあるgzipブラウザのデータを出力するでしょう。 出力をファイルにリダイレクトし、gzip -cd -v test.gzを実行して、期待される出力を生成してから、 'unexpected end of file'を実行しました。JSONをGZIPのブラウザにストリーミング

ブラウザはまだ出力がゼロ(firebug)になっているので、gzipストリームへの部分的なフラッシュがブラウザによって解釈されるかどうか疑問に思っていました。

ストリームには主にjavascript命令/オブジェクトが含まれており、クライアント側で受信して解析する必要があります。サーブレットは一度呼び出され、セッションの全期間にわたってオープンに保たれ、クライアントにデータが提供されます。接続はクローズされないので、ストリームは実行され続け、サーバーから一種のプッシュデータを提供します。

マイセットアップ: WinXPの32ビット、 GWT 2.4.0、 Jetty7.4(微調整付き).. GzipFilter、 Firefoxの8 /クローム10

は、私の知る限りは、RFCごとに知っているようにスペックコンテンツはストリームの終了後にのみデコードされるので、私がやっていることは不可能かもしれません。しかし、主要なブラウザでこの作業を行うための提案があるかもしれません。

その後編集:

  • GzipFilterは、web.xmlのを介して指定されると、それはブラウザがContent-encodingを受け
  • okです:gzipの
  • バイトはHTTPResponseはストリームテスト
  • に書き込まれていますコンパイルされたGWTモードとライブGWTモードの両方で
  • iso-8859-1でテストされているか指定されていないか
  • content-type is texフィルタなしトン/ htmlの
  • のweb.xmlすべてが
  • それを修正
+0

、独自のgzipフィルタを書く代わりに、桟橋のいずれかを使用する理由は何ですか? – milan

+1

修正済みです。私は答えを提出することができるようになると、詳細を書きます。私はGzipFilterのフラッシュがoutputStreamが閉じられるまで登録しないので、これをやっています。リアルタイムストリーミングをしようとすると動作しません。 – brainwash

+0

あなたの疑問にあなたのモチベーションを含めるといいでしょう、同じ問題を抱えている人がいるかもしれません。 – milan

答えて

0

を作品を通して適用しました。私はファイルへの出力といくつかの統計を書き込んだデバッグ目的のカスタム中間出力ストリームを使用していましたが、いくつかのメソッドをun-overridenにしておきました。一度これを取り除くと機能しています。

好奇心旺盛なもののために私のパラメータ、:

  • バッファサイズ:8K
  • 分のgzipサイズ:64B
  • にflushメソッドをオーバーライドし、あなたがGzipStreamを拡張する必要があるのgzipストリームをフラッシュするには圧縮レベルをゼロに設定してからもう一度やり直し、間に収縮()します。
  • 私はすでに述べたように、このようにする理由は、ソケットを閉じずに、ブラウザにJSONオブジェクトのライブストリーミングで、このカスタムをGzip /のDeflaterストリーム

を指し1とgzOutストリームの割り当て操作を置き換えます。これは、すべてのブラウザがWebSocketを適切に実装するまでです。プッシュデータを処理するには、WebSocket実装が必要です。または、サーバーがデータをプッシュできる常にオープンな接続が必要です。

その後編集:車輪の再発明後:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4255743

関連する問題