SlideShare una empresa de Scribd logo
1 de 22
Javaプログラマのための
WebSocket概要
           2013/1/31 Java ♡ HTML5 Night

   株式会社オープンウェブ・テクノロジー
          白石 俊平(@Shumpei)
自己紹介

   白石俊平と申します。
   HTML5開発者コミュニティhtml5j.org管理人(会員
    数5,000名超)
   HTML5とか勉強会主催(毎月一回、100名を動員)
   Google API Expert (HTML5)
   Microsoft Most Valuable Professional (IE9)
   Twitter: @Shumpei
   著書:HTML5&API入門
WebSocketとは何か?
WebSocketとは何か?
   リアルタイム・ウェブをもたらす技術として
    非常に期待されている
   実態は、TCP上に構築された双方向のソケッ
    ト通信プロトコル
   HTTPをベースにしているため、Webとの親和
    性が非常に高い
     Webブラウザからの利用を主眼としている

     ファイアウォールを超えられる
WebSocketの動作原理
1.   通常のHTTP GETリクエストを用いて、サーバ
     に接続
2.   サーバがWebSocketに対応していれば、その接
     続をそのままWebSocketの通信経路として「張
     りっぱなし」にする。

            Server         Server
              TCP




                             TCP
     HTTP            双方向
     GET      接       通信     接
              続              続
クライアントとサーバの対称性
   一度接続が確立してしまえば、クライアントと
    サーバの間で役割やできることの違いはほとんど
    ない
              ・テキスト送受信
              ・バイナリ送受信
              ・通信の圧縮
              ・ping
              ・...
     クライアント              サーバ
WebSocketの利用例
   オンライン黒板
WebSocketの利用例
   BrowserQuest
WebSocketの利用例
   Technitone
技術面から見たWebSocket
仕様
   プロトコル
     IETFにより標準化(RFC6455)

   JavaScript API
     W3Cにより標準化(The
                 WebSocket API)
     勧告候補というステータス
WebSocketのエンドポイント
   URL・・・ws://もしくはwss://で始まる
   ポート・・・80番(ws)/443番(wss)
WebSocketハンドシェイク
   Upgradeヘッダ付きのGETリクエストに対し、
    サーバが「101 Switching Protocols」で応答す
    れば、接続確立

GET /chat HTTP/1.1             HTTP/1.1 101 Switching Protocols
Host: server.example.com       Upgrade: websocket
Upgrade: websocket             Connection: Upgrade
Connection: Upgrade            Sec-WebSocket-Accept: YYY
Sec-WebSocket-Key: XXX         Sec-WebSocket-Protocol: chat
Origin: http://example.com
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
フレームフォーマット
   6-14バイトの小さなヘッダを付与
   ペイロード長は最大2^64バイト

                                            バイト長

               1                     2                    3                     4

      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
        R R R         M
        S S S         A
     FI V V V         S
     N 1 2 3   opcode K    ペイロード長            拡張ペイロード長(ペイロード長が126の場合)

                          拡張ペイロード長(ペイロード長が127の場合)

     拡張ペイロード長(ペイロード長が127の場合)                                     マスクキー

                     マスクキー                                       データ本体

                                          データ本体…
プロトコルの拡張が可能
     圧縮やマルチプレクサなどの拡張が提案され
      ている


GET /chat HTTP/1.1                        HTTP/1.1 101 Switching Protocols
Host: server.example.com                  Upgrade: websocket
Upgrade: websocket                        Connection: Upgrade
Connection: Upgrade                       Sec-WebSocket-Extensions: deflate-
Sec-WebSocket-Key: XXX                    frame
Origin: http://example.com                Sec-WebSocket-Accept: YYY
Sec-WebSocket-Extensions: deflate-frame   Sec-WebSocket-Protocol: chat
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
サブプロトコル
   WebSocketは、接続確立後はシンプルなTCP
    ソケット通信とみなすことが可能。
   →WebSocket上で新たなプロトコルが構築さ
    れることを当初から想定している
GET /chat HTTP/1.1             HTTP/1.1 101 Switching Protocols
Host: server.example.com       Upgrade: websocket
Upgrade: websocket             Connection: Upgrade
Connection: Upgrade            Sec-WebSocket-Accept: YYY
Sec-WebSocket-Key: XXX         Sec-WebSocket-Protocol: chat
Origin: http://example.com
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
WebSocketのJavaScript API
WebSocketのJavaScript API
   WebSocket APIは比較的実装が進んでいる




     IE    Firefox   Chrome   Safari   Opera    iOS     Android
                                               Safari   Browser
    10.0     ○         ○       6.0     12.1     6.0       ×
JavaScript APIの使用法

まず、WebSocket接続を確立する。

// WebSocket接続を開始
var ws = new WebSocket('ws://localhost:2000/chat');

// 接続が確立したら呼び出される
ws.onopen = function() {
  // 初期化処理
};
JavaScript APIの使用法

データの送信
// sendメソッドにより、サーバにデータを送信できる
// sendメソッドは文字列だけではなく、ArrayBufferや
// Blobも送信可能
ws.send('Hello');



データの受信
// データが到着したら呼び出される
ws.onmessage = function(e) {
  // dataプロパティに受信データが格納
  var data = e.data;
  …
};
JavaScript APIの使用法

接続のクローズ(クライアントから)
// クライアントから接続を切断
ws.close();



接続のクローズ(サーバから)
// データが到着したら呼び出される
ws.onclose = function(e) {
  var wasClean = e.wasClean; // 正常終了か
  var code = e.code; // ステータスコード
  var reason = e.reason; // 切断理由
};
ぼくはここまで!



  ご清聴ありがとうございました!
       @Shumpei

Más contenido relacionado

La actualidad más candente

Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 

La actualidad más candente (20)

アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
Redisの特徴と活用方法について
Redisの特徴と活用方法についてRedisの特徴と活用方法について
Redisの特徴と活用方法について
 
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
Dbts 分散olt pv2
Dbts 分散olt pv2Dbts 分散olt pv2
Dbts 分散olt pv2
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
Ethernetの受信処理
Ethernetの受信処理Ethernetの受信処理
Ethernetの受信処理
 
IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門IT系エンジニアのためのプレゼンテーション入門
IT系エンジニアのためのプレゼンテーション入門
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門NumPyが物足りない人へのCython入門
NumPyが物足りない人へのCython入門
 
Paxos
PaxosPaxos
Paxos
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
 
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -
Yahoo! JAPANのデータパイプラインで起きた障害とチューニング - Apache Kafka Meetup Japan #5 -
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
 
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
 

Similar a JavaプログラマのためのWebSocket概要

Html5, Web Applications 2
Html5, Web Applications 2Html5, Web Applications 2
Html5, Web Applications 2
totty jp
 
Chromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそうChromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそう
mganeko
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
david9142
 
Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】
Kikunaga Taishi
 

Similar a JavaプログラマのためのWebSocket概要 (20)

これから利用拡大?WebSocket
これから利用拡大?WebSocketこれから利用拡大?WebSocket
これから利用拡大?WebSocket
 
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
 
WebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocketWebSocket Protocol と Plack::Middleware::WebSocket
WebSocket Protocol と Plack::Middleware::WebSocket
 
Html5, Web Applications 2
Html5, Web Applications 2Html5, Web Applications 2
Html5, Web Applications 2
 
websocket-survery
websocket-surverywebsocket-survery
websocket-survery
 
WebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリWebSocket + Node.jsでつくるチャットアプリ
WebSocket + Node.jsでつくるチャットアプリ
 
再入門、サーバープッシュ技術
再入門、サーバープッシュ技術再入門、サーバープッシュ技術
再入門、サーバープッシュ技術
 
WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編WebRTCの技術解説 第二版 公開版 本編
WebRTCの技術解説 第二版 公開版 本編
 
OpenStack base public cloud service by GMO Internet Inc., at 2013/12/12 Okin...
OpenStack base public cloud service by GMO Internet Inc.,  at 2013/12/12 Okin...OpenStack base public cloud service by GMO Internet Inc.,  at 2013/12/12 Okin...
OpenStack base public cloud service by GMO Internet Inc., at 2013/12/12 Okin...
 
Gaeja20121130
Gaeja20121130Gaeja20121130
Gaeja20121130
 
Let's begin WebRTC
Let's begin WebRTCLet's begin WebRTC
Let's begin WebRTC
 
SL囲む会東京5 Nodejs×Silverlightではまったこと
SL囲む会東京5 Nodejs×SilverlightではまったことSL囲む会東京5 Nodejs×Silverlightではまったこと
SL囲む会東京5 Nodejs×Silverlightではまったこと
 
PlayFramework1.2.4におけるWebSocket
PlayFramework1.2.4におけるWebSocketPlayFramework1.2.4におけるWebSocket
PlayFramework1.2.4におけるWebSocket
 
Chromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそうChromebook 「だけ」で WebRTCを動かそう
Chromebook 「だけ」で WebRTCを動かそう
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1
 
Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】Webサーバの基礎知識【編集済み】
Webサーバの基礎知識【編集済み】
 
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
 
WebSocketプロトコル
WebSocketプロトコルWebSocketプロトコル
WebSocketプロトコル
 

Más de Shumpei Shiraishi

HTML5がもたらすアプリ開発へのインパクト
HTML5がもたらすアプリ開発へのインパクトHTML5がもたらすアプリ開発へのインパクト
HTML5がもたらすアプリ開発へのインパクト
Shumpei Shiraishi
 
この人と結婚していいの?を読んで
この人と結婚していいの?を読んでこの人と結婚していいの?を読んで
この人と結婚していいの?を読んで
Shumpei Shiraishi
 

Más de Shumpei Shiraishi (20)

俺的GEB概論(前半)
俺的GEB概論(前半)俺的GEB概論(前半)
俺的GEB概論(前半)
 
コンセプトのつくりかた - アイデアをかたちにする技術
コンセプトのつくりかた - アイデアをかたちにする技術コンセプトのつくりかた - アイデアをかたちにする技術
コンセプトのつくりかた - アイデアをかたちにする技術
 
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶjQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
jQueryの先に行こう!最先端のWeb開発トレンドを学ぶ
 
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
 
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門
 
「それでも人生にイエスと言う」を読んで
「それでも人生にイエスと言う」を読んで「それでも人生にイエスと言う」を読んで
「それでも人生にイエスと言う」を読んで
 
「それでも人生にイエスと言う」を読んで
「それでも人生にイエスと言う」を読んで「それでも人生にイエスと言う」を読んで
「それでも人生にイエスと言う」を読んで
 
Angular2実践入門
Angular2実践入門Angular2実践入門
Angular2実践入門
 
WebRTCがビデオ会議市場に与えるインパクトを探る
WebRTCがビデオ会議市場に与えるインパクトを探るWebRTCがビデオ会議市場に与えるインパクトを探る
WebRTCがビデオ会議市場に与えるインパクトを探る
 
変身×フランツ・カフカ
変身×フランツ・カフカ変身×フランツ・カフカ
変身×フランツ・カフカ
 
イラスト日用服飾辞典/三面記事の歴史/健康男 を読んで
イラスト日用服飾辞典/三面記事の歴史/健康男 を読んでイラスト日用服飾辞典/三面記事の歴史/健康男 を読んで
イラスト日用服飾辞典/三面記事の歴史/健康男 を読んで
 
「1秒でわかる!アパレル業界ハンドブック」を読んで
「1秒でわかる!アパレル業界ハンドブック」を読んで「1秒でわかる!アパレル業界ハンドブック」を読んで
「1秒でわかる!アパレル業界ハンドブック」を読んで
 
漫☆画太郎論
漫☆画太郎論漫☆画太郎論
漫☆画太郎論
 
HTML5時代のフロントエンド開発入門
HTML5時代のフロントエンド開発入門HTML5時代のフロントエンド開発入門
HTML5時代のフロントエンド開発入門
 
6,000人のWeb技術者コミュニティを5年間やってみて学んだこと
6,000人のWeb技術者コミュニティを5年間やってみて学んだこと6,000人のWeb技術者コミュニティを5年間やってみて学んだこと
6,000人のWeb技術者コミュニティを5年間やってみて学んだこと
 
はじめにことばありき
はじめにことばありきはじめにことばありき
はじめにことばありき
 
秒速一億円
秒速一億円秒速一億円
秒速一億円
 
HTML5がもたらすアプリ開発へのインパクト
HTML5がもたらすアプリ開発へのインパクトHTML5がもたらすアプリ開発へのインパクト
HTML5がもたらすアプリ開発へのインパクト
 
この人と結婚していいの?を読んで
この人と結婚していいの?を読んでこの人と結婚していいの?を読んで
この人と結婚していいの?を読んで
 
20130921レジュメ2
20130921レジュメ220130921レジュメ2
20130921レジュメ2
 

Último

Último (11)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

JavaプログラマのためのWebSocket概要

  • 1. Javaプログラマのための WebSocket概要 2013/1/31 Java ♡ HTML5 Night 株式会社オープンウェブ・テクノロジー 白石 俊平(@Shumpei)
  • 2. 自己紹介  白石俊平と申します。  HTML5開発者コミュニティhtml5j.org管理人(会員 数5,000名超)  HTML5とか勉強会主催(毎月一回、100名を動員)  Google API Expert (HTML5)  Microsoft Most Valuable Professional (IE9)  Twitter: @Shumpei  著書:HTML5&API入門
  • 4. WebSocketとは何か?  リアルタイム・ウェブをもたらす技術として 非常に期待されている  実態は、TCP上に構築された双方向のソケッ ト通信プロトコル  HTTPをベースにしているため、Webとの親和 性が非常に高い  Webブラウザからの利用を主眼としている  ファイアウォールを超えられる
  • 5. WebSocketの動作原理 1. 通常のHTTP GETリクエストを用いて、サーバ に接続 2. サーバがWebSocketに対応していれば、その接 続をそのままWebSocketの通信経路として「張 りっぱなし」にする。 Server Server TCP TCP HTTP 双方向 GET 接 通信 接 続 続
  • 6. クライアントとサーバの対称性  一度接続が確立してしまえば、クライアントと サーバの間で役割やできることの違いはほとんど ない ・テキスト送受信 ・バイナリ送受信 ・通信の圧縮 ・ping ・... クライアント サーバ
  • 7. WebSocketの利用例  オンライン黒板
  • 11. 仕様  プロトコル  IETFにより標準化(RFC6455)  JavaScript API  W3Cにより標準化(The WebSocket API)  勧告候補というステータス
  • 12. WebSocketのエンドポイント  URL・・・ws://もしくはwss://で始まる  ポート・・・80番(ws)/443番(wss)
  • 13. WebSocketハンドシェイク  Upgradeヘッダ付きのGETリクエストに対し、 サーバが「101 Switching Protocols」で応答す れば、接続確立 GET /chat HTTP/1.1 HTTP/1.1 101 Switching Protocols Host: server.example.com Upgrade: websocket Upgrade: websocket Connection: Upgrade Connection: Upgrade Sec-WebSocket-Accept: YYY Sec-WebSocket-Key: XXX Sec-WebSocket-Protocol: chat Origin: http://example.com Sec-WebSocket-Protocol: chat Sec-WebSocket-Version: 13
  • 14. フレームフォーマット  6-14バイトの小さなヘッダを付与  ペイロード長は最大2^64バイト バイト長 1 2 3 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 R R R M S S S A FI V V V S N 1 2 3 opcode K ペイロード長 拡張ペイロード長(ペイロード長が126の場合) 拡張ペイロード長(ペイロード長が127の場合) 拡張ペイロード長(ペイロード長が127の場合) マスクキー マスクキー データ本体 データ本体…
  • 15. プロトコルの拡張が可能  圧縮やマルチプレクサなどの拡張が提案され ている GET /chat HTTP/1.1 HTTP/1.1 101 Switching Protocols Host: server.example.com Upgrade: websocket Upgrade: websocket Connection: Upgrade Connection: Upgrade Sec-WebSocket-Extensions: deflate- Sec-WebSocket-Key: XXX frame Origin: http://example.com Sec-WebSocket-Accept: YYY Sec-WebSocket-Extensions: deflate-frame Sec-WebSocket-Protocol: chat Sec-WebSocket-Protocol: chat Sec-WebSocket-Version: 13
  • 16. サブプロトコル  WebSocketは、接続確立後はシンプルなTCP ソケット通信とみなすことが可能。  →WebSocket上で新たなプロトコルが構築さ れることを当初から想定している GET /chat HTTP/1.1 HTTP/1.1 101 Switching Protocols Host: server.example.com Upgrade: websocket Upgrade: websocket Connection: Upgrade Connection: Upgrade Sec-WebSocket-Accept: YYY Sec-WebSocket-Key: XXX Sec-WebSocket-Protocol: chat Origin: http://example.com Sec-WebSocket-Protocol: chat Sec-WebSocket-Version: 13
  • 18. WebSocketのJavaScript API  WebSocket APIは比較的実装が進んでいる IE Firefox Chrome Safari Opera iOS Android Safari Browser 10.0 ○ ○ 6.0 12.1 6.0 ×
  • 19. JavaScript APIの使用法 まず、WebSocket接続を確立する。 // WebSocket接続を開始 var ws = new WebSocket('ws://localhost:2000/chat'); // 接続が確立したら呼び出される ws.onopen = function() { // 初期化処理 };
  • 20. JavaScript APIの使用法 データの送信 // sendメソッドにより、サーバにデータを送信できる // sendメソッドは文字列だけではなく、ArrayBufferや // Blobも送信可能 ws.send('Hello'); データの受信 // データが到着したら呼び出される ws.onmessage = function(e) { // dataプロパティに受信データが格納 var data = e.data; … };
  • 21. JavaScript APIの使用法 接続のクローズ(クライアントから) // クライアントから接続を切断 ws.close(); 接続のクローズ(サーバから) // データが到着したら呼び出される ws.onclose = function(e) { var wasClean = e.wasClean; // 正常終了か var code = e.code; // ステータスコード var reason = e.reason; // 切断理由 };