There's an echo in my head

日々のメモ。

今更ながらSPDYとWebSocketのServer Pushについて調べてみた

ログの見れないSkypeやっぱ不便だよね→Hubotとかあるし自分でチャット作ったら面白そう→そういやLINEってSPDYなんだっけ→WebSocketってSPDYに乗るんじゃなかったっけ。

というわけでSPDYとWebSocketのServer Pushについてざっくりと調べてみた。

SPDY と WebSocket の基礎と SPDY の Pushとか、WEB+DB PRESS Vol.75のSPDYの特集の第1章を読んだ感じ、

  • SPDYでは、後々リクエストが来るとわかっているリソースをサーバから送りつけてキャッシュさせておく
    • それによってリクエストの生成と通信のコストを削減できる
    • レスポンスを並列で返せるようになったのでさらに時間を短縮できる
  • WebSocketでは、純粋に相互にメッセージのやりとりをする
    • やり取りするモノが最初に決まるので毎回送受信するヘッダを削減できる
    • まさに相互通信

ことが目的みたいだ。

なので、サーバを介して相互にテキストのやり取りをするチャットなんかはWebSocketのほうが適しているだろうし、複数の要素から成り立つWebページの配信にはSPDYのほうが適しているだろう。つまるところSPDYとWebSocketのServer Pushは目的が違うし、どっちが優れているかは一概には言えない。

要は適材適所で使いましょう、と。

以上でだいたい終わり、以下おまけ。

ひとつめ。WebSocket over SPDYは実際にJettyで実装される(されてる?)みたいだ。

ふたつめ。LINEはSPDYベースのプロトコルを独自に使っている。この記事をななめ読みした感じではなぜWebSocketではなくSPDYベースなのかがわからなかった。

もしかしたらLINEではテキストだけでなく画像などの様々なフォーマットのデータのやり取りをするので、キャッシュの機構をうまく使うことで相互通信っぽく見せているのかも?接続のヘルスチェックはWebSocketでもできそうだけどなあ。考えてみたけど、いまいちわからない。

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。