Advanced Tech Night No.06




      これから利用拡大?WebSocket



                                      2013/03/15
                            Acroquest Technology
                                    阪本 雄一郎
自己紹介

 阪本 雄一郎(さかもと ゆういちろう)
 Acroquest Technology株式会社

 OSSの評価や、
  それを利用した標準プラットフォームの開発を
  やってます。
  ① Hadoop
  ② Mahout
  ③ Zabbix
  ④ Nginx
           etc…
                                      1
                Advanced Tech Night
目次

1.   次世代標準 HTML5
2.   ブラウザで双方向通信 WebSocket
3.   今までの通信方式との違い
4.   サポート状況
5.   デモ
6.   クライアントサイド実装
7.   サーバサイド実装
8.   使用上の注意点
9.   まとめ

                                       2
                 Advanced Tech Night
1. 次世代標準 HTML5

HTML5とは・・・
プロプライエタリなプラグインとして提供されている
リッチインターネットアプリケーションのプラット
フォームを置き換えることを標榜しており、ウェブ
アプリケーションのプラットフォームとしての機能
やマルチメディア要素が実装されている。
                                   (Wikipedia)




                                          3
             Advanced Tech Night
1. 次世代標準 HTML5

HTML5とは・・・


ブラウザの標準機能でリッチな画面・機能を実現
できるようにするための規格。




                                   4
             Advanced Tech Night
1. 次世代標準 HTML5

 HTML4では
  ① 基本、「動かない」ページの構築。
    →アニメーションはFlashで。
  ② ちょっとだけ賢い入力フォームを作るにも、jQuery
    などのライブラリが必要。
 HTML5だと
  ① Canvasが使える。
    →アニメーションはJavaScriptで。
  ② 日付入力など、よく使う入力
    フォームはデフォルトで搭載。

                                   5
             Advanced Tech Night
2. ブラウザで双方向通信 WebSocket

WebSocketとは・・・
コンピュータ・ネットワーク用の通信規格の1つである。イ
ンターネットの標準化団体であるW3CとIETFがウェブサー
バーとウェブブラウザとの間の通信のために規定を予定
している双方向通信用の技術規格であり、APIはW3Cが、
WebSocket プロトコルはIETFが策定に関与している。プ
ロトコルの仕様は RFC 6455。TCP上で動く。
                                       (Wikipedia)




                                             6
                 Advanced Tech Night
2. ブラウザで双方向通信 WebSocket

WebSocketとは・・・


Webブラウザ上で双方向リアルタイム通信を行う
ための規格。

   HTML5の仕様から分離                         !?
                                        ・・・
                                        ○×△




                                              7
                  Advanced Tech Night
2. ブラウザで双方向通信 WebSocket

1. 真のリアルタイム通信をサポート。
2. セキュア通信をサポート。
   →HTTPSに相当するプロトコルが存在するため、業務利用もし
   やすい。

     クライアント             Web/APサーバ             DBサーバ




                            WebSocketServer



                                                  8
              Advanced Tech Night
3. 今までの通信方式との違い

ブラウザとWebサーバ間の通信方式には、
登場順に以下の方式があります。
 ① Ajax
 ② Comet
 ③ WebSocket

それぞれについて、簡単に説明します。


                                     9
               Advanced Tech Night
3-1. Ajax概要①

1. Asynchronous JavaScript + XMLの略。
2. 文字通り、「非同期通信」を行う手法。
   →ページ遷移をしないでデータの送受信を行う。


    ページ表示           GET /index.html
     要求
                                          HTMLページを
                       HTTP 200 OK
                                             返却
   JavaScriptから
   リクエスト送信
                   GET /getInfo.htm
      (Ajax)
                                         クライアントからの
                       HTTP 200 OK       リクエストを受けて、
                                          XMLやJSON
                                           データを返却

                                                10
                   Advanced Tech Night
3-1. Ajax概要②


      • ほぼすべてのブラウザで使用可能。
        (IE6でも使用できる。)



      • クライアントからのポーリング方式のため、
        サーバからのリアルタイム通知には
        向かない。



                                     11
               Advanced Tech Night
3-2. Comet概要①

1. Ajaxでできなかったリアルタイム通知を擬似的に実現。
2. サーバサイドでリクエストを受け取った後、タイムアウトぎりぎり
   までレスポンスを返さない。

  ページ表示要求         GET /index.html


                     HTTP 200 OK       HTMLページ
  JavaScriptから
  リクエスト送信        GET /getInfo.htm
    (Comet)
                                       イベントが発生
                                       するまで待機

                     HTTP 200 OK       イベント発生

                                                12
                 Advanced Tech Night
3-2. Comet概要②



      • 擬似リアルタイム通信が可能。


      • タイムアウトぎりぎりまで接続を保持するた
        め、リソース消費が大きい。
        →接続中はずっとスレッドを占有するため、
         C10K問題が発生する。



                                      13
                Advanced Tech Night
3-3. WebSocket概要①

専用プロトコルでリアルタイム双方向通信を実現。

  画面遷移開始               GET /index.html

                        HTTP 200 OK            HTMLページ

  特殊ヘッダ付与                  GET /start
                                                プロトコル
 以降、WebSocket   HTTP 101 Switching Protocols    切り替え
  プロトコルで
    送受信                     メッセージ

                                               サーバ/クライ
                            メッセージ              アントどちらから
                                                でも送信可能
                            メッセージ

                                                        14
                      Advanced Tech Night
3-3. WebSocket概要②


      • ソケット通信と同様、リアルタイムな
        双方向通信が可能。
      • 専用プロトコルを使用するため、通信の
        オーバーヘッドが少ない。


      • IE9までは対応していない。




                                    15
              Advanced Tech Night
4. サポート状況

・・・といっても、
最新のIE10ではWebSocketをサポート。

         ブラウザ               IE             Chrome   FireFox   Safari
  サポート開始バージョン(※1)           10               16       11        6
     最新バージョン(※2)            10               25       19        6




      今後はWebSocketを使用したシステムが
          増えてくる可能性大!

 (※1) Wikipedia調べ
 (※2) 2013/03/15現在
                                                                       16
                     Advanced Tech Night
5. デモ

複数端末のブラウザ間で、画面遷移が連動するデモを
作ってみた。

  左!      左




                                    左
  左!
                                    左




                                         Java7
  左!                                    Tomcat7
                 WebSocket
                                                  17
              Advanced Tech Night
6. クライアントサイド実装

1. JavaScriptでWebSocketオブジェクトを生成。
2. 接続時やメッセージ受信時のイベントフック関
   数を登録。
var ws = new WebSocket(
    "ws://localhost:8080/WebSocketServer/websocket/CarouselServlet");
ws.onopen = function(){
};
ws.onmessage = function(message){
    $carousel.carousel(message.data);
};
ws.onerror = function(event){
    $("#message").html("Error occurred.");
};




                                                                 18
                             Advanced Tech Night
6. クライアントサイド実装

1. メッセージ送信はsendメソッドを呼ぶのみ。
ws.send($(this).attr("data-slide"));




   ※sendは非同期で実行されます。




                                             19
                       Advanced Tech Night
7. サーバサイド実装

1. TomcatにWebSocketServletクラスが用意され
   ているため、それを継承。
2. createWebSocketInboundメソッドで、送受信を
   行うオブジェクト(MessageInboundクラスのサブ
   クラス)を返却。
public class CarouselServlet extends WebSocketServlet {
    private InboundContext inboundContext_ = new InboundContext();

    @Override
    protected StreamInbound createWebSocketInbound(String protocol,
            HttpServletRequest request) {
        return new CarouselMessageInbound(this.inboundContext_);
    }
}


                                                                 20
                             Advanced Tech Night
7. サーバサイド実装

1. MessageInboundでは、接続時、切断時、メッセージ受
   信時(テキスト/バイナリ)の処理を記述できる。
public class CarouselMessageInbound extends MessageInbound {
    protected void onOpen(WsOutbound wsOutbound) {
    }

    protected void onClose(int status) {
    }

    protected void onBinaryMessage(ByteBuffer buffer) throws IOException {
    }

    protected void onTextMessage(CharBuffer buffer) throws IOException {
    }
}



2. メッセージ送信は、WsOutboundに書き込む。
wsOutbound.writeTextMessage(buffer);
wsOutbound.flush();


                                                                             21
                                  Advanced Tech Night
8. 使用上の注意点

WebSocketには、複数のプロトコルが存在する。
各環境でサポートするプロトコルを確認すること。


               プロトコル                              IE        Firefox   Chrome   Safari
draft-hixie-thewebsocketprotocol-75                                     4      5.0.0
draft-hixie-thewebsocketprotocol-76                           4         6      5.0.1
draft-ietf-hybi-thewebsocketprotocol-00
※同一のプロトコル内容
draft-ietf-hybi-thewebsocketprotocol-07                       6
draft-ietf-hybi-thewebsocketprotocol-10                       7         14
RFC 6455                                         10           11        16       6



                                                                                       22
                                      Advanced Tech Night
9. まとめ

1. WebSocketはHTML5から分離した仕様。
   「ブラウザをリッチに」する中での、サーバ通信部分を
   担う。
2. WebSocketを用いることで、ブラウザ上で双方向のリ
   アルタイム通信が可能。
3. 対応ブラウザも増えてきたため、今後WebSocketを利
   用したシステムがもっと増えてくる(はず!)




                                   23
             Advanced Tech Night
Let’s enjoy WebSocket !




         Infrastructures Evolution

                                                                    24
  Copyright © Acroquest Technology Co., Ltd. All rights reserved.

More Related Content

PPTX
再入門、サーバープッシュ技術
PDF
サーバPUSHざっくりまとめ
PDF
WebSocket / WebRTCの技術紹介
PPT
websocket-survery
PDF
Janogia20120921 yoshinotakeshi
PDF
第2回Web技術勉強会 webパフォーマンス改善編
PPT
Webアプリケーションの無停止稼働
PDF
WebSocket Protocol と Plack::Middleware::WebSocket
再入門、サーバープッシュ技術
サーバPUSHざっくりまとめ
WebSocket / WebRTCの技術紹介
websocket-survery
Janogia20120921 yoshinotakeshi
第2回Web技術勉強会 webパフォーマンス改善編
Webアプリケーションの無停止稼働
WebSocket Protocol と Plack::Middleware::WebSocket

What's hot (20)

PDF
2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会
PDF
H2O - making HTTP better
PDF
Html5, Web Applications 2
PDF
Kansai.pm#15 Perl Ocean
PPTX
Apacheチューニング
PDF
InfiniBand on Debian
PDF
lua_nginx_module JSON-RPC 2.0 Batch Request
PPTX
中小規模サービスのApacheチューニング
PDF
第1回Webサーバ勉強会 - 212-223 ブラウザマッチ処理
PDF
Webサーバのチューニング
PDF
Word press on conoha このべん #3
PDF
ノンプログラマのためのウェブサーバ入門
PPTX
20140926 mt cloud_handson_seminar
PDF
10分でわかる marathon-lb
PPT
Study2study3 nslope
PPTX
Varnish
PDF
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
PPTX
軽量高機能webサーバーnginx
PPTX
Windows azureを知ろう ロール&ストレージ編
PPTX
簡単なHTTPサーバの作成
2012/6/10 Webのパフォーマンスを考える @ 【第三回】初心者向けホームページ勉強会
H2O - making HTTP better
Html5, Web Applications 2
Kansai.pm#15 Perl Ocean
Apacheチューニング
InfiniBand on Debian
lua_nginx_module JSON-RPC 2.0 Batch Request
中小規模サービスのApacheチューニング
第1回Webサーバ勉強会 - 212-223 ブラウザマッチ処理
Webサーバのチューニング
Word press on conoha このべん #3
ノンプログラマのためのウェブサーバ入門
20140926 mt cloud_handson_seminar
10分でわかる marathon-lb
Study2study3 nslope
Varnish
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
軽量高機能webサーバーnginx
Windows azureを知ろう ロール&ストレージ編
簡単なHTTPサーバの作成
Ad

Similar to これから利用拡大?WebSocket (20)

PPTX
JavaプログラマのためのWebSocket概要
PDF
WebSocket + Node.jsでつくるチャットアプリ
PDF
HttpとTelnetをつなぐ何か
PPTX
Chromebook 「だけ」で WebRTCを動かそう
PDF
Nodejsによるwebsocket入門
PDF
Vitochaを用いた Jail+VIMAGE Webインターフェイス
PDF
Gaeja20121130
PDF
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
PDF
Web基礎
PDF
AndroidでWebSocket
PPT
Lesson01
 
PPTX
SL囲む会東京5 Nodejs×Silverlightではまったこと
PDF
Mvc conf session_5_isami
PDF
猫でも分かる Android WebKit
PDF
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
PPTX
10th jan 2013_miyazaki
PPTX
5jCup WebRTC賞
PDF
【17-A-5】ウェブアーキテクチャの歴史と未来
PDF
後期第七回ネットワークチーム講座資料
PPT
Webサーバの基礎知識【編集済み】
JavaプログラマのためのWebSocket概要
WebSocket + Node.jsでつくるチャットアプリ
HttpとTelnetをつなぐ何か
Chromebook 「だけ」で WebRTCを動かそう
Nodejsによるwebsocket入門
Vitochaを用いた Jail+VIMAGE Webインターフェイス
Gaeja20121130
いよいよ始められる Java EEでのWebSocket #jjug #jjug_ccc #ccc_r21
Web基礎
AndroidでWebSocket
Lesson01
 
SL囲む会東京5 Nodejs×Silverlightではまったこと
Mvc conf session_5_isami
猫でも分かる Android WebKit
最新Web 通信系API総まくり!WebRTC, Streams, Push api etc.
10th jan 2013_miyazaki
5jCup WebRTC賞
【17-A-5】ウェブアーキテクチャの歴史と未来
後期第七回ネットワークチーム講座資料
Webサーバの基礎知識【編集済み】
Ad

More from AdvancedTechNight (20)

PDF
CSS3Rendererを使ってiOSでもサクサク3D
PDF
D3.jsと学ぶVisualization(可視化)の世界
PDF
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
PDF
CSSだけで実現するグラフィック表現
PDF
全部入り!WGPで高速JavaScript+HML5体験
PDF
Backbone.js入門
PDF
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
PDF
three.jsで作る3Dの世界
PDF
単なるキャッシュじゃないよ!?infinispanの紹介
PDF
Stormの注目の新機能TridentAPI
PDF
Spine入門
PDF
分散ストリーム処理フレームワーク Apache S4
PDF
Twitterのリアルタイム分散処理システム「Storm」入門 demo
PDF
Twitterのリアルタイム分散処理システム「Storm」入門
PDF
ログ収集フレームワークの新バージョン「FlumeNG」
PPTX
Hadoop scr第7回 hw2011フィードバック
PPTX
ななめ45°から見たJavaOne
PPTX
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
PPTX
ATN No.1 Hadoop vs Amazon EMR
PDF
ATN No.2 大阪から来たJavaPuzzlers
CSS3Rendererを使ってiOSでもサクサク3D
D3.jsと学ぶVisualization(可視化)の世界
3DCG(3Dコンピュータグラフィック)をWebGLで始めよう
CSSだけで実現するグラフィック表現
全部入り!WGPで高速JavaScript+HML5体験
Backbone.js入門
TypeScriptのススメ ~JavaエンジニアのためのJava(like)Script
three.jsで作る3Dの世界
単なるキャッシュじゃないよ!?infinispanの紹介
Stormの注目の新機能TridentAPI
Spine入門
分散ストリーム処理フレームワーク Apache S4
Twitterのリアルタイム分散処理システム「Storm」入門 demo
Twitterのリアルタイム分散処理システム「Storm」入門
ログ収集フレームワークの新バージョン「FlumeNG」
Hadoop scr第7回 hw2011フィードバック
ななめ45°から見たJavaOne
ATN No.1 MapReduceだけでない!? Hadoopとその仲間たち
ATN No.1 Hadoop vs Amazon EMR
ATN No.2 大阪から来たJavaPuzzlers

これから利用拡大?WebSocket