※この記事のまとめは Twitter4JのSPDY対応について – TwitPane をご参照ください。
Twitter4Jを次世代HTTPのSPDYに対応してみた。
OkHttpというSPDY&HTTP/2.0対応の超便利ライブラリがあったのでそれを使わせてもらっただけ。
- SPDY対応版(twitter4j-spdy-support):
でも後述の通りベンチマーク取ってみたら単独スレッドでの通信では速くないというかむしろ遅くなるんで、あくまでも実験的な実装ということで。
⇒Android/Dalvikだと TFJ-296 対応で強制的に http.keepAlive=false されていてコネクションプールが機能していませんでしたorz
⇒OkHttpのコネクションプールを別途設定することで高速化しました! (詳細は後ほど)
導入方法
下記2つのjarをクラスパス上に(Androidならlibsに)配置するだけ。
- twitter4j-spdy-support-3.0.5-SNAPSHOT.jar
- okhttp-1.2.1-jar-with-dependencies.jar http://square.github.io/okhttp/からダウンロードできる
あとはtwitter4jが自動的に"twitter4j.internal.http.alternative.HttpClientImpl"を見つけて使ってくれる感じ。Twitter4Jよくできてる。
簡易ベンチマーク(並列実行)
拙作のTwitterクライアントTwitPaneに入れてベンチマーク取ってみた。
showStatusを100msずつずらして11回*1リクエストした結果。SPDY版がいい感じで速いです。
GalaxyNexus SC-04D/Android 4.2
環境 | 試行1回目(平均所要時間) | 2回目 |
---|---|---|
no SPDY, 3G | 2095ms | 1980ms |
SPDY, 3G | 1088ms(48%高速) | 1398ms(29%高速) |
no SPDY, WiFi/B-Flets | 654ms | 606ms |
SPDY, WiFi/B-Flets | 527ms(19%高速) | 505ms(17%高速) |
うまく並列化させると20%くらいは速くなりそうな感じですかね。
測定に使ったコード: https://gist.github.com/takke/8143276