$30 off During Our Annual Pro Sale. View Details »

WebSocketの圧縮機能とSocket.IO

 WebSocketの圧縮機能とSocket.IO

websocketのpermessage-deflate extensionについて

Naoyuki Kanezawa

February 10, 2015
Tweet

More Decks by Naoyuki Kanezawa

Other Decks in Technology

Transcript

  1. WebSocketの圧縮機能と
    Socket.IO
    2/10 Node学園#15

    View Slide

  2. ID: nkzawa
    socket.io コミッター

    View Slide

  3. 最近 ws モジュールに
    permessage-deflate extension
    を実装しました

    View Slide

  4. wsモジュール
    nodeのデファクトwebsocket server/client
    socket.ioでも使用している

    View Slide

  5. 古くからあるissueを解決
    ws#34 3年前
    socket.io#1148 2年前

    View Slide

  6. View Slide

  7. View Slide

  8. permessage-deflate とは

    View Slide

  9. メッセージデータを deflate 圧縮する
    WebSocketの拡張

    View Slide

  10. HTTPでいうところのgzip圧縮

    View Slide

  11. View Slide

  12. View Slide

  13. permessage-deflate
    vs
    http compression

    View Slide

  14. 最も重要な違い
    http: レスポンスにのみ適用
    websocket: 双方向

    View Slide

  15. 圧縮パラメータ
    http: 圧縮データのheaderに含める
    websocket: ハンドシェイク時に交換

    View Slide

  16. windowBits: ウィンドウ・サイズ
    noContextTakeOver: コンテキストを引き継ぐかどうか

    View Slide

  17. Context Takeover
    各メッセージを同一コンテキストで圧縮すること
    で圧縮率を改善

    View Slide

  18. View Slide

  19. 残念なお知らせ

    View Slide

  20. 現状Chromeのみサポート
    ( FireFoxはv37から )

    View Slide

  21. ブラウザでは設定変更ができない
    JSのWebSocket APIにインターフェースがないため、
    常に有効かつデフォルト値で動作する。

    View Slide

  22. 謝辞

    View Slide

  23. この機能に関連するNodeの脆弱性を、
    @jovi0608 (Shigeki Ohtsu) さん
    に直していただいたおかげで、
    無事リリースできました!m(__)m

    View Slide

  24. socket.io では

    View Slide

  25. 次バージョン (v1.4) でサポートされます。
    (そもそもsocket.ioのために実装した)

    View Slide

  26. ● 圧縮がデフォルトで有効
    ● polling時はhttp圧縮
    ● メッセージ毎にon/offを切り替え可能

    View Slide

  27. var socket = io({
    perMessageDeflate: true,
    httpCompression: true
    });
    socket.compress(false).emit(‘woot’);

    View Slide

  28. まとめ

    View Slide

  29. ● 地味な機能だけど、パフォーマンス改善にイ
    ンパクトは大きいはず!
    ● Socket.IOでも近いうちにサポート!

    View Slide