WebSocketの圧縮機能とSocket.IO

 WebSocketの圧縮機能とSocket.IO

websocketのpermessage-deflate extensionについて

6aea7f3a669da60c1a5744d8b22bd6e6?s=128

Naoyuki Kanezawa

February 10, 2015
Tweet

Transcript

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

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

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

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

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

  6. None
  7. None
  8. permessage-deflate とは

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

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

  11. None
  12. None
  13. permessage-deflate vs http compression

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

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

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

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

  18. None
  19. 残念なお知らせ

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

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

  22. 謝辞

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

  24. socket.io では

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

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

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

  28. まとめ

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