Más contenido relacionado
La actualidad más candente (17)
Similar a 20110622 haruyama webso]cket (20)
Más de Makoto Haruyama (14)
20110622 haruyama webso]cket
- 2. WebSocketとは? ・公式draft http://dev.w3.org/html5/websockets/ ・何ができるの? 一言でいうと・・・・ Client側とServer側のリアルタイム通信が よりシンプルにかつ、 付加が少なく実現できる Client(ブラウザ)、Server(web server) 今までの技術でも実現可能 ex). Comet 何が問題なの?
- 3. 従来の方法 一体何が問題なの? ・従来の手法だと、HTTP通信に頼るしかない ->同時接続数が多いと メモリなどのリソースを大量に消費する。 1リクエスト/レスポンスヘッダー自体は数KB ・HTTPだとステートレスな通信しかできない ->セッション管理等が面倒 ex.)クッキーに情報を保存する リクエストのURIパラメータにすべての値を指定する(例:http://example.com/?val=[a,b,c])
- 4. HTTPのヘッダー ・リクエストヘッダー GET / HTTP/1.1 Host: today.is.sky.blue.sky User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; ja-JP-mac; rv:1.9.2.14) Gecko/20110218 Firefox/3.6.14 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive Cookie: wp-settings-1=editor%3Dhtml%26m1%3Do%26m3%3Dc; wp-settings-time-1=1304502829; __utma=56171822.1273043786.1307855232.1307855232.1307855232.1; __utmz=56171822.1307855232.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) ・レスポンスヘッダー HTTP/1.1 200 OK Date: Mon, 20 Jun 2011 18:12:40 GMT Content-Type: text/plain; charset=UTF-8 Connection: close Transfer-Encoding: chunked
- 5. 従来の方法 一体何が問題なの? ・従来の手法だと、HTTP通信に頼るしかない ->同時接続数が多いと メモリなどのリソースを大量に消費する。 1リクエスト/レスポンスヘッダー自体は数KB ・HTTPだとステートレスな通信しかできない ->セッション管理等が面倒 ex.)クッキーに情報を保存する リクエストのURIパラメータにすべての値を指定する(例:http://example.com/?val=[a,b,c])
- 7. WebSocket 通信にHTTPではなく、別のプロトコルWSを使う (ただし、接続の確立にはHTTPを使用) ・一回接続を確立すれば、ステートフルに通信可能 TCPの接続を張り続けておく ・一回あたりのデータ転送のオーバーヘッドが小さい データの前後に1バイトずつ付けた「データフレーミング」という形式 「数キロバイトのデータ転送量を(最低)2バイトへ、150msの遅延を50msにできるとしたら、それはわずかな向上といったような生やさしいものではない。実際この2つの事実だけをもっても、WebSocketをGoogleにとって本気にさせるには十分なものだ」
- 9. WebSocket 通信にHTTPではなく、別のプロトコルWSを使う (ただし、接続の確立にはHTTPを使用) ・一回接続を確立すれば、ステートフルに通信可能 TCPの接続を張り続けておく ・一回あたりのデータ転送のオーバーヘッドが小さい データの前後に1バイトずつ付けた「データフレーミング」という形式 「数キロバイトのデータ転送量を(最低)2バイトへ、150msの遅延を50msにできるとしたら、それはわずかな向上といったような生やさしいものではない。実際この2つの事実だけをもっても、WebSocketをGoogleにとって本気にさせるには十分なものだ」
- 10. WSのヘッダー ・リクエスト GET /demo HTTP/1.1 Host: example.com Connection: Upgrade Sec-WebSocket-Key2: 12998 5 Y3 1 .P00 Sec-WebSocket-Protocol: sample Upgrade: WebSocket Sec-WebSocket-Key1: 4 @1 46546xW%0l 1 5 Origin: http://example.com ^n:ds[4U ・レスポンス HTTP/1.1 101 WebSocket Protocol Handshake Upgrade: WebSocket Connection: Upgrade Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Location: ws://example.com/demo Sec-WebSocket-Protocol: sample 8jKS'y:G*Co,Wxa- この後は・・・・ 0x00[Data]0xFF という形式でやり取りを行う
- 11. 対応ブラウザ 対応しているブラウザは下記の二つ Safari 5 Chrome 10 FireFoxは? Firefox 4 の Beta 8 以降から WebSocketのサポートを無効化すると決定したのは、プロトコルレベルのセキュリティ問題によるものです。Beta 7 では Chrome や Safari 同様に -76 バージョンのプロトコルをサポートしています。Beta 8 からはサポートされません。 https://dev.mozilla.jp/hacksmozillaorg/websockets-disabled-in-firefox-4/ 実際は、FlashやJava appletにもいえる問題です。 http://blog.livedoor.jp/kotesaki/archives/1600864.html
- 12. 実際におこる確率 Cache Poisoning Flash : 0.12% Java Applet : 0.15% WebSocket: 0.01% 原文 http://www.adambarth.com/papers/2011/huang-chen-barth-rescorla-jackson.pdf
- 13. WebSocketの中身 ・ブラウザ側のAPI 旧WebSockets API ・サーバと通信するための通信プロトコル 旧WebSocket protocol この二つがWebSocketの中身 WebSocketはW3Cによって規定されるAPIと IETFによって規定されている通信プロトコルによってなりたちます。 以前はAPIの方を「The Web Sockets API」(複数形)、 プロトコルの方を「The Web Socket protocol」(単数形)としていましたが、 現在では両者とも「The WebSocket」に統一されたようです。
- 16. WebSocket protocol ・クライアントからサーバにTCP接続してhandshakeする ・handshakeのリクエスト/レスポンスのやりとりはHTTPそのもの ・クライアントはリクエストボディで8バイトのランダム文字列(challenge)を送る ・サーバは16バイトのresponse文字列を返す ・handshake後、TCP接続は張りっぱなしにする ・handshake後のTCP接続上、双方向にデータを送信可能 ・テキストデータは 0x00 で始まり 0xff で終了するフレーム単位 ・テキストデータの文字コードはUTF8 ・バイナリデータも送れる(タイプと長さを最初に送る) ・URLは ws:// or wss:// ・紳士的な切断は 0xff 0x00 を送って、0xff 0x00 を受信してからTCPレベルで切断 ラッパーされていることがほとんどなので、何やっているかはライブラリの中身をみないと・・・ でも時間がなかったです。。。。。。。