技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

Playframework2.0.4 のgzip転送について調べてみた

そもそもPlayにこの機能ないの?って思ってソースを追っかける。
すると、

https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/play/api/controllers/Assets.scala

惜しい、Assets じゃ無いんですよ、、、。
とは言え、static resource は圧縮されるのですねぇ、、、、なるほど。
じゃぁ通常のレスポンスは?と考えた時、最初に考える実装方法はNettyServerの起動時にパイプラインに割り込む方法だ。

play.core..server.NettyServer のパイプライン作成に割り込みを入れる。

newPipeline.addLast("compressor", new HttpContentCompressor())
newPipeline.addLast("decompressor", new HttpContentDecompressor())    

これビルド方法どうしようとか考えて探してたら
同じ事考える人居るもんですね、、、、メインにマージされてないくさいけど。

そしたらこれ

曰く、Play2.1 にはIteratee に入ってるらしい、、、てことはこの状態で chunk にぶち込めるのか(;´Д`)

メンドくさいがヘッダに ContentEncoding を gzip にしつつ、GZIPOutputStream 作って返す関数必要かもなぁ