More Related Content
Similar to Janogia20120921 yoshinotakeshi
Similar to Janogia20120921 yoshinotakeshi (20)
More from Keisuke Ishibashi
More from Keisuke Ishibashi (11)
Janogia20120921 yoshinotakeshi
- 4. ブラウザ サーバ
• 1 イベント ≒ 1 HTTP リクエスト
– プロキシや API の制約
POST /hoge HTTP/1.1
Host: …
‘a’ をタイプ Cookie: …
Accept-Encoding: …
…
a
4
- 5. TCP なのに
• 順序非保存
– リクエストにシーケンス番号
• 認証
– 毎回 Cookie
• In-flight リクエスト数 ≦
TCP 本数×パイプライン深度
5
- 6. ブラウザ サーバ
• 太郎くん long poll
GET /back_channel
HTTP/1.1
…
• サーバしばし沈黙 …
• 花子さん発言! 太郎くんに送信
HTTP/1.1 200 OK
…
<Hanako> Hello
6
- 10. WebSocket
API Protocol
@ W3C, WHATWG @ IETF
RFC 6455
10
- 11. シンプルな API
• 接続
ws =
new WebSocket(“ws://example.com”);
• 送信
ws.send(“Hello!”);
• 受信ハンドラ登録
ws.onmessage = function (e) {
console.log(e.data);
};
11
- 12. コンパクトなプロトコル
• 低オーバーヘッド
send(“hoge”) hoge
ヘッダ ペイロード
(Opcode, 長さ など) 4バイト
上り 6バイト 下り 2バイト
• TCP 1本で full duplex
12
- 14. ポート 80 で HTTP と共存
• HTTP Upgrade が来たら
GET /ws HTTP/1.1
Connection: Upgrade
Upgrade: websocket HTTP/1.1 101 Switching Protocols
… Connection: Upgrade
Upgrade: websocket
…
• 以降は WebSocket
サーバ クライアント
14
- 16. In-flight メッセージ
好きなときに好きなだけ
ブラウザ サーバ
イベント発生
イベント発生
イベント発生
イベント発生
イベント発生
イベント発生
イベント発生
16
- 17. サーバからのデータ
好きなときに好きなだけ
• Long poll 無用
ブラウザ サーバ
17
- 19. 多重化
• 現在 1 インスタンス 1 TCP
– Long-lived で idle でもずっと消費
– タブの数だけどんどん増加
• 順序保存より並列性が重要なアプリも
– たくさんはりたい
• 1 TCP に N インスタンスを多重化
– 今、拡張仕様書いてます!
19
- 21. 対応状況
• Chrome (2009年~)
• Firefox
• Internet Explorer 10
• Opera
• Safari
21
- 22. 使いものになるの?
• Chrome を使った 2009 年の実験
– WebSocket 成功数 ÷ HTTP 成功数
Port TLS 成功率
80 No 67%
61985 No 86%
443 Yes 95%
22
- 23. L7 のみなさんへ
• HTTP プロキシ
• ファイヤーウォール
• ロードバランサ
– HTTP Upgrade に対応
– WebSocket を読んで
• バランス
– 多重化をばらす
• フィルタ、DoS ブロック
• Web サーバ
– ぜひ実装を
23
- 24. L3, L4 のみなさんへ
• ロードバランサ
• NAT
– Load と TCP 本数があんまり関係なくなる
• Fairness metric の再考
– L4 バランサだけでは traffic が偏る可能性
• L7 まで見る
• Timeout の再考
(Thanks to v6pc)
24
- 25. WebSocket とは
• (主に)ウェブブラウザのための
• 軽量で
• セキュリティや HTTP との連携を考慮した
• Built-in の
• 双方向通信手法
• トラフィックパターンいろいろ変わるかも
25