SlideShare ist ein Scribd-Unternehmen logo
1 von 78
Downloaden Sie, um offline zu lesen
Unity + WebSocketで広がる

              オンラインゲームの可能性

                  株式会社セガ

                   上原光晶


12年10月4日木曜日                       1
Contents

              WebSocketの紹介

              WebSocketを使ったデモ(ブラウザ・Unity)

              WebSocketのメリット・デメリット

              まとめ




12年10月4日木曜日                                 2
自己紹介
              2006年にシステム屋からアプリ開発者に

              2008年頃から、携帯電話向けオンラインゲー

              ムの主にサーバを担当(iアプリ)

              2012年2月にセガへ転職し、現在はUnityを

              使ったスマートフォン向けオンラインゲームを

              開発中


12年10月4日木曜日                              3
WebSocketとは?


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


12年10月4日木曜日                                  5
何が出来るのか?


12年10月4日木曜日              6
ブラウザ上でのデモ



12年10月4日木曜日           7
Unity + WebSocket
              で何が出来るのか

12年10月4日木曜日                   8
Unity + WebSocketのデモ




12年10月4日木曜日                     9
リアルタイム通信が出来る
                     ゲームサーバ

                        WebSocketの
                         コネクション




              ユーザA    ユーザB

12年10月4日木曜日                          10
リアルタイム通信が出来る
                       ゲームサーバ




       ① 移動先を
        クリック




                ユーザA    ユーザB

12年10月4日木曜日                     11
リアルタイム通信が出来る
     ② 移動先座標を          ゲームサーバ
      サーバに通知



       ① 移動先を
        クリック




                ユーザA    ユーザB

12年10月4日木曜日                     12
リアルタイム通信が出来る
     ② 移動先座標を          ゲームサーバ
      サーバに通知
                          ③ 即座に、移動先の
                             座標を他の
                           クライアントに通知
       ① 移動先を
        クリック




                ユーザA    ユーザB

12年10月4日木曜日                            13
Unity + WebSocketで、リアルタイムの

          オンラインゲームが作れるようになる!




12年10月4日木曜日                                14
Unity + WebSocketで、リアルタイムの

          オンラインゲームが作れるようになる!

               とは言え、これまでも数多く、

              リアルタイムのオンラインゲームが

                      存在していた


12年10月4日木曜日                                15
UO(ウルティマオンライン)や

          MHF(モンハンフロンティア)、

              最近ではDiabloIIIなんてのも出た



12年10月4日木曜日                          16
『ファンタシースターオンライン2』

                本日正式サービス開始!
12年10月4日木曜日                       17
『三国志コンクエスト』

                Unityで開発したオンラインゲーム

              SLG+ACTを融合。ACTはリアルタイム方式

12年10月4日木曜日                             18
これまでと何が違うのか



12年10月4日木曜日             19
これまでのオンラインゲームは、直接

              TCP/IPを使っていた(場合が多い)




12年10月4日木曜日                         20
これまでのオンラインゲームは、直接

              TCP/IPを使っていた(場合が多い)


               TCP/IPで直接通信するのと、

          WebSocketで通信することの違いは?



12年10月4日木曜日                         21
WebSocketには、TCP/IPを直接使うこ

          とに対して3つのメリットが発生する。




12年10月4日木曜日                              22
WebSocketのメリット




12年10月4日木曜日                    23
WebSocketのメリット

              1.既存インフラへの影響の少なさ




12年10月4日木曜日                      24
WebSocketのメリット

              1.既存インフラへの影響の少なさ

              2.メッセージ単位の送受信




12年10月4日木曜日                      25
WebSocketのメリット

              1.既存インフラへの影響の少なさ

              2.メッセージ単位の送受信

              3.暗号化




12年10月4日木曜日                      26
既存インフラへの影響の少なさ




12年10月4日木曜日                27
既存インフラへの影響の少なさ

        TCP/IPでは、他のプロセスが使っていない専用のポー

        ト番号で通信を行う場合が多い(35000番ポート等)




12年10月4日木曜日                           28
既存インフラへの影響の少なさ

        TCP/IPでは、他のプロセスが使っていない専用のポー

        ト番号で通信を行う場合が多い(35000番ポート等)


        WebSocketサーバは、Webサーバが兼任する場合が多

        く、セッション接続にHTTPを利用するため、80/443

        番ポートでそのまま接続できる



12年10月4日木曜日                             29
既存インフラへの影響の少なさ
                              ゲームサーバ
              TCP/IPを直接

              使う場合、専用

              の通信を行うた

              めの穴を開ける

              必要があった
                          クライアント
12年10月4日木曜日                            30
既存インフラへの影響の少なさ
                               ゲームサーバ
              TCP/IPを直接

              使う場合、専用

              の通信を行うた

              めの穴を開ける
                            game.server.com:35000
                                    に接続
              必要があった
                          クライアント
12年10月4日木曜日                                         31
既存インフラへの影響の少なさ
                               ゲームサーバ
              TCP/IPを直接

              使う場合、専用

              の通信を行うた             35000番ポートへの
                                    アクセス許可

              めの穴を開ける
                            game.server.com:35000
                                    に接続
              必要があった
                          クライアント
12年10月4日木曜日                                         32
既存インフラへの影響の少なさ
                               ゲームサーバ
              TCP/IPを直接           35000番ポートへのア
                                    クセスをサーバに
                                      フォワード

              使う場合、専用

              の通信を行うた             35000番ポートへの
                                    アクセス許可

              めの穴を開ける
                            game.server.com:35000
                                    に接続
              必要があった
                          クライアント
12年10月4日木曜日                                         33
既存インフラへの影響の少なさ
                                ゲームサーバ
              WebSocketは、

              HTTPが使える環

              境であればそのま

              ま利用出来る(プ

              ロキシを通過する

              ことも可能)
                            クライアント
12年10月4日木曜日                              34
既存インフラへの影響の少なさ
                                   ゲームサーバ
              WebSocketは、

              HTTPが使える環

              境であればそのま

              ま利用出来る(プ

              ロキシを通過する       ws://game.server.com/wsurl/
                                       に接続
              ことも可能)
                            クライアント
12年10月4日木曜日                                            35
既存インフラへの影響の少なさ
                                   ゲームサーバ
              WebSocketは、

              HTTPが使える環

              境であればそのま
                                         80番ポートへの
              ま利用出来る(プ                    HTTPアクセス



              ロキシを通過する       ws://game.server.com/wsurl/
                                       に接続
              ことも可能)
                            クライアント
12年10月4日木曜日                                            36
既存インフラへの影響の少なさ
                                   ゲームサーバ
              WebSocketは、
                                         80番ポートの
                                        WebSocketへの
              HTTPが使える環                 アクセスをサーバに
                                          フォワード


              境であればそのま
                                         80番ポートへの
              ま利用出来る(プ                    HTTPアクセス



              ロキシを通過する       ws://game.server.com/wsurl/
                                       に接続
              ことも可能)
                            クライアント
12年10月4日木曜日                                            37
メッセージ単位の送受信



12年10月4日木曜日             38
メッセージ単位の送受信
              TCP/IPでは、独自のプロトコル仕様を定義し、

              送受信処理を実装していた




12年10月4日木曜日                              39
メッセージ単位の送受信
              TCP/IPでは、独自のプロトコル仕様を定義し、

              送受信処理を実装していた


              WebSocketではメッセージ単位の送受信が規定

              されており、メッセージを構成する部分はライブ

              ラリ側で実装される



12年10月4日木曜日                               40
メッセージ単位の送受信
              メッセージID                       データサイズ                             データ本体
               2byte                         2byte                              XXbyte

                                   ソースコード例
              for( ; ; ) {
                 short messageId = stream.readShort();
                 short dataSize = stream.readShort();
                 byte[] data = new byte[dataSize];
                 int readSize = 0;
                 while( true ) {        // ★ データの読み込みが完了するまでループ
                      readSize += stream.read( data, readSize, dataSize - readSize );
                      if( readSize >= dataSize ) {
                           break;
                      }
                 }
                 execute( messageId, data );
              }



12年10月4日木曜日                                                                              41
メッセージ単位の送受信
       サーバ・クライアントの双方で実装する必要がある。

       エラー処理も必要。




12年10月4日木曜日                       42
メッセージ単位の送受信
       サーバ・クライアントの双方で実装する必要がある。

       エラー処理も必要。


       サーバでは多くのクライアントが接続されるため、負

       荷対策やメモリ管理も必要となる。




12年10月4日木曜日                       43
メッセージ単位の送受信
              0                     1                    2                   3
                    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
                  +-+-+-+-+-------+-+-------------+-------------------------------+
                  |F|R|R|R| opcode|M| Payload len |     Extended payload length     |
                  |I|S|S|S| (4) |A|        (7)     |             (16/64)            |
                  |N|V|V|V|        |S|             |   (if payload len==126/127)    |
                  | |1|2|3|        |K|             |                                |
                  +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
                  |      Extended payload length continued, if payload len == 127 |
                  + - - - - - - - - - - - - - - - +-------------------------------+
                  |                                |Masking-key, if MASK set to 1 |
                  +-------------------------------+-------------------------------+
                  | Masking-key (continued)        |          Payload Data          |
                  +-------------------------------- - - - - - - - - - - - - - - - +
                  :                      Payload Data continued ...                 :
                  + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
                  |                      Payload Data continued ...                 |
                  +---------------------------------------------------------------+

         WebSocketでは、テキスト or バイナリ形式の

         データの送受信がプロトコルとして規定されている

12年10月4日木曜日                                                                             44
メッセージ単位の送受信
      ソースコード例
        // bytebufferが受信データそのもの
        protected void onBinaryMessage(ByteBuffer bytebuffer)
          throws IOException {
            short messageId = bytebuffer.getShort();
            execute(messageId, bytebuffer);
        }




        データ受信処理が大幅に簡略化される

12年10月4日木曜日                                                     45
暗号化


12年10月4日木曜日         46
暗号化
        HTTPと同様に、WebSocketの暗号化も
        プロトコルとして規定されている




12年10月4日木曜日                       47
暗号化
        HTTPと同様に、WebSocketの暗号化も
        プロトコルとして規定されている

                http:// => https://
                 ws:// => wss://




12年10月4日木曜日                           48
暗号化
        HTTPと同様に、WebSocketの暗号化も
        プロトコルとして規定されている

                http:// => https://
                 ws:// => wss://

                デフォルトポート番号
                  80 => 443

12年10月4日木曜日                           49
WebSocketのメリット

              既存インフラへの影響の少なさ

              メッセージ単位の送受信

              暗号化




12年10月4日木曜日                    50
WebSocketのメリット

              既存インフラへの影響の少なさ

              メッセージ単位の送受信

              暗号化

              これらは、HTTPの特徴でもある

12年10月4日木曜日                      51
WebSocketのメリット
          つまり、TCP/IPの軽量な双方向通信と、

         HTTPの利便性の両方のメリットを持つ。




12年10月4日木曜日                       52
WebSocketのメリット
          つまり、TCP/IPの軽量な双方向通信と、

         HTTPの利便性の両方のメリットを持つ。

          これらは既存でも実現できていたが、非常に

         面倒であり、相応の技術力を要していた。




12年10月4日木曜日                       53
WebSocketのメリット
          つまり、TCP/IPの軽量な双方向通信と、

         HTTPの利便性の両方のメリットを持つ。

          これらは既存でも実現できていたが、非常に

         面倒であり、相応の技術力を要していた。

         => オンラインゲームの通信部分の

              開発のハードルが大幅に下がった
12年10月4日木曜日                       54
一方、デメリットは無いのか




12年10月4日木曜日               55
WebSocketのデメリット
          現状、考えられるデメリットは2つ。




12年10月4日木曜日                     56
WebSocketのデメリット
          現状、考えられるデメリットは2つ。


         1.Request - Response形式が無い




12年10月4日木曜日                          57
WebSocketのデメリット
          現状、考えられるデメリットは2つ。


         1.Request - Response形式が無い

         2.実績が少ない



12年10月4日木曜日                          58
Request - Response形式が無い

         WebSocketでは一方向のメッセージの定

         義しか無いため、Request - Response

         形式のメッセージの送受信を行う場合

         は、独自に実装が必要。



12年10月4日木曜日                             59
実績が少ない
       2011年12月:RFC6455規定
       2012年01月:Jetty対応
       2012年02月:node.js対応
       2012年03月:Tomcat対応(テスト実装)
       2012年06月:UniWeb対応

              動作実績は、せいぜい半年程度

12年10月4日木曜日                       60
デモに至るまで・・・




12年10月4日木曜日                61
デモに至るまで・・・
       Tomcat7.0.27�+ Google Chrome => OK




12年10月4日木曜日                                 62
デモに至るまで・・・
       Tomcat7.0.27�+ Google Chrome => OK
       Tomcat7.0.27�+ Unity(websocket-sharp)
       => プロトコルバージョン不一致により通信不可




12年10月4日木曜日                                    63
デモに至るまで・・・
       Tomcat7.0.27�+ Google Chrome => OK
       Tomcat7.0.27�+ Unity(websocket-sharp)
       => プロトコルバージョン不一致により通信不可
       Tomcat7.0.27�+ Unity(SuperWebSocket)
       => SuperWebSocket動作せず(VisualStudioだとOK)




12年10月4日木曜日                                      64
デモに至るまで・・・
       Tomcat7.0.27�+ Google Chrome => OK
       Tomcat7.0.27�+ Unity(websocket-sharp)
       => プロトコルバージョン不一致により通信不可
       Tomcat7.0.27�+ Unity(SuperWebSocket)
       => SuperWebSocket動作せず(VisualStudioだとOK)

       Jetty8.1.3�+ Unity(websocket-sharp)
        => OKだがプロトコルバージョンが古い




12年10月4日木曜日                                      65
デモに至るまで・・・
       Tomcat7.0.27�+ Google Chrome => OK
       Tomcat7.0.27�+ Unity(websocket-sharp)
       => プロトコルバージョン不一致により通信不可
       Tomcat7.0.27�+ Unity(SuperWebSocket)
       => SuperWebSocket動作せず(VisualStudioだとOK)

       Jetty8.1.3�+ Unity(websocket-sharp)
        => OKだがプロトコルバージョンが古い

       Tomcat7.0.27�+ Unity(UniWeb)
       => いずれかのバグにより動作不可
12年10月4日木曜日                                      66
デモに至るまで・・・
       UniWebの以下の箇所を修正したら、うまく動いた!
      Response.cs
      171     cacheable = string.Compare (GetHeader ("Etag"), "", true) != 0;
      172     chunked = string.Compare (GetHeader ("Transfer-Encoding"), "chunked", true) == 0;
      173     zipped = string.Compare (GetHeader ("Content-Encoding"), "gzip", true) == 0;
      174     byte[] buffer = new byte[1024];
      175     chunked = false;      // ★★★ この行を挿入 ★★★
      176
      177
      178
              if (chunked) {
                while (true) {
                               Response.cs
                               175: chunked = false;
      179        // Collect Body
      180        var hexLength = ReadLine (inputStream);




12年10月4日木曜日                                                                                       67
デモに至るまで・・・
       UniWebの以下の箇所を修正したら、うまく動いた!
      Response.cs
      171     cacheable = string.Compare (GetHeader ("Etag"), "", true) != 0;
      172     chunked = string.Compare (GetHeader ("Transfer-Encoding"), "chunked", true) == 0;
      173     zipped = string.Compare (GetHeader ("Content-Encoding"), "gzip", true) == 0;
      174     byte[] buffer = new byte[1024];
      175     chunked = false;      // ★★★ この行を挿入 ★★★
      176
      177
      178
              if (chunked) {
                while (true) {
                               Response.cs
                               175: chunked = false;
      179        // Collect Body
      180        var hexLength = ReadLine (inputStream);




                 まだまだ現時点ではイバラの道

12年10月4日木曜日                                                                                       68
まとめ
        現時点では実績の少ないWebSocketだが、オンライ

        ンゲームを作る上での有用性には確信が持てる

        (RFC6455にも、「ゲームでも使える」との記述が

        ある)


        今後、オンラインゲームはWebSocketで作るのが当

        たり前、という時代が来る!かも知れない・・・


12年10月4日木曜日                           69
Unity + WebSocketで、オンライン

              ゲームの新しい時代を切り拓け!!




12年10月4日木曜日                              70
ご清聴、ありがとうございました。




12年10月4日木曜日                  71
デモに至るまで・・・




12年10月4日木曜日                72
デモに至るまで・・・
       TomcatがWebSocketを実装した!?
       => Tomcat7.0.27(3/31リリース)インストール
       => Google Chromeでチャットの動作確認!




12年10月4日木曜日                              73
デモに至るまで・・・
       TomcatがWebSocketを実装した!?
       => Tomcat7.0.27(3/31リリース)インストール
       => Google Chromeでチャットの動作確認!


       Unityをクライアントにしよう!
       => Unity + websocket-sharp を使う
       => バージョン不一致で接続不可
        websocket-sharpの更新が1年以上停止していた


12年10月4日木曜日                              74
デモに至るまで・・・
       他のC#の実装を探す
       => SuperWebSocketというのがあるらしい
       => Unityに組み込もうと悪戦苦闘
       => VisualStudioでは動くがUnityでは動かず
       => 技術不足により断念




12年10月4日木曜日                             75
デモに至るまで・・・
       他のC#の実装を探す
       => SuperWebSocketというのがあるらしい
       => Unityに組み込もうと悪戦苦闘
       => VisualStudioでは動くがUnityでは動かず
       => 技術不足により断念

       Tomcatを諦めてJettyを試す
       => 慣れないJettyに戸惑いつつも単体動作完了
       => Unity + websocket-sharp とJettyとの通信成功
       => 但し、RFC6455ではないのでちょっとモヤモヤ
         (websocket-sharpが古いため)

12年10月4日木曜日                                      76
デモに至るまで・・・
       UnityのAssetであるUniWebが、WebSocketをサポー
       トしたらしい!
       => Tomcat7.0.27 + Unity3.5.2 + UniWebを試す
       => 接続には失敗する・・・が、リクエストは通っており、レ
       スポンスでエラーとなっているらしい




12年10月4日木曜日                                       77
デモに至るまで・・・
       UnityのAssetであるUniWebが、WebSocketをサポー
       トしたらしい!
       => Tomcat7.0.27 + Unity3.5.2 + UniWebを試す
       => 接続には失敗する・・・が、リクエストは通っており、レ
       スポンスでエラーとなっているらしい

       Tomcat + UniWebの通信データを解析
       => レスポンスの認識違いによるエラーと判明
       => 多分Tomcatが悪い・・・が、Tomcatの手直しは難し
       いので、UniWeb側を修正

12年10月4日木曜日                                       78

Weitere ähnliche Inhalte

Was ist angesagt?

究極のゲーム用通信プロトコル “WebRTC”
究極のゲーム用通信プロトコル “WebRTC”究極のゲーム用通信プロトコル “WebRTC”
究極のゲーム用通信プロトコル “WebRTC”Ryosuke Otsuya
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春VerMasahito Zembutsu
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話torisoup
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
Troubleshooting containerized triple o deployment
Troubleshooting containerized triple o deploymentTroubleshooting containerized triple o deployment
Troubleshooting containerized triple o deploymentSadique Puthen
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてTatsuhiko Yamamura
 
第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介ksk_ha
 
Immersal を活用した AR クラウドなシステム開発とハンズオン!
Immersal を活用した AR クラウドなシステム開発とハンズオン!Immersal を活用した AR クラウドなシステム開発とハンズオン!
Immersal を活用した AR クラウドなシステム開発とハンズオン!NishoMatsusita
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
無料で仮想Junos環境を手元に作ろう
無料で仮想Junos環境を手元に作ろう無料で仮想Junos環境を手元に作ろう
無料で仮想Junos環境を手元に作ろうakira6592
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
モノビットエンジン と AWS と クラウドパッケージで 最強のリアルタイム・マルチプレイ環境を構築&運用
モノビットエンジン と AWS と クラウドパッケージで最強のリアルタイム・マルチプレイ環境を構築&運用モノビットエンジン と AWS と クラウドパッケージで最強のリアルタイム・マルチプレイ環境を構築&運用
モノビットエンジン と AWS と クラウドパッケージで 最強のリアルタイム・マルチプレイ環境を構築&運用モノビット エンジン
 
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>エピック・ゲームズ・ジャパン Epic Games Japan
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法モノビット エンジン
 
OpenStack勉強会
OpenStack勉強会OpenStack勉強会
OpenStack勉強会Yuki Obara
 
200人での対戦も可能!?Photon 新SDKについて
200人での対戦も可能!?Photon 新SDKについて200人での対戦も可能!?Photon 新SDKについて
200人での対戦も可能!?Photon 新SDKについてPhoton運営事務局
 

Was ist angesagt? (20)

究極のゲーム用通信プロトコル “WebRTC”
究極のゲーム用通信プロトコル “WebRTC”究極のゲーム用通信プロトコル “WebRTC”
究極のゲーム用通信プロトコル “WebRTC”
 
忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver忙しい人の5分で分かるDocker 2017年春Ver
忙しい人の5分で分かるDocker 2017年春Ver
 
Epic Online Services でできること
Epic Online Services でできることEpic Online Services でできること
Epic Online Services でできること
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Troubleshooting containerized triple o deployment
Troubleshooting containerized triple o deploymentTroubleshooting containerized triple o deployment
Troubleshooting containerized triple o deployment
 
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろうUE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
 
第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介第4回Linux-HA勉強会資料 Pacemakerの紹介
第4回Linux-HA勉強会資料 Pacemakerの紹介
 
Immersal を活用した AR クラウドなシステム開発とハンズオン!
Immersal を活用した AR クラウドなシステム開発とハンズオン!Immersal を活用した AR クラウドなシステム開発とハンズオン!
Immersal を活用した AR クラウドなシステム開発とハンズオン!
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
無料で仮想Junos環境を手元に作ろう
無料で仮想Junos環境を手元に作ろう無料で仮想Junos環境を手元に作ろう
無料で仮想Junos環境を手元に作ろう
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
モノビットエンジン と AWS と クラウドパッケージで 最強のリアルタイム・マルチプレイ環境を構築&運用
モノビットエンジン と AWS と クラウドパッケージで最強のリアルタイム・マルチプレイ環境を構築&運用モノビットエンジン と AWS と クラウドパッケージで最強のリアルタイム・マルチプレイ環境を構築&運用
モノビットエンジン と AWS と クラウドパッケージで 最強のリアルタイム・マルチプレイ環境を構築&運用
 
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 1 <Shader Compile, PSO Cache編>
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
 
OpenStack勉強会
OpenStack勉強会OpenStack勉強会
OpenStack勉強会
 
UE4 MultiPlayer Online Deep Dive 基礎編2 -Traveling- (historia様ご講演) #ue4dd
UE4 MultiPlayer Online Deep Dive 基礎編2 -Traveling-  (historia様ご講演)  #ue4ddUE4 MultiPlayer Online Deep Dive 基礎編2 -Traveling-  (historia様ご講演)  #ue4dd
UE4 MultiPlayer Online Deep Dive 基礎編2 -Traveling- (historia様ご講演) #ue4dd
 
200人での対戦も可能!?Photon 新SDKについて
200人での対戦も可能!?Photon 新SDKについて200人での対戦も可能!?Photon 新SDKについて
200人での対戦も可能!?Photon 新SDKについて
 
今から始めるUbuntu入門_202307.pdf
今から始めるUbuntu入門_202307.pdf今から始めるUbuntu入門_202307.pdf
今から始めるUbuntu入門_202307.pdf
 

Ähnlich wie Unity WebSocket

「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2
「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2
「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2Akira Suzuki
 
websocket-survery
websocket-surverywebsocket-survery
websocket-surveryhogemaru_
 
Microsoft Copilot Studio.pdf
Microsoft Copilot Studio.pdfMicrosoft Copilot Studio.pdf
Microsoft Copilot Studio.pdfTomokazu Kizawa
 
【DeepSecurityUserNight】我が家の箱入り娘を世間に晒すのは危険なのでDeepSecurityに見守ってもらった話
【DeepSecurityUserNight】我が家の箱入り娘を世間に晒すのは危険なのでDeepSecurityに見守ってもらった話【DeepSecurityUserNight】我が家の箱入り娘を世間に晒すのは危険なのでDeepSecurityに見守ってもらった話
【DeepSecurityUserNight】我が家の箱入り娘を世間に晒すのは危険なのでDeepSecurityに見守ってもらった話Hibino Hisashi
 
20161227 Classmethod Basic Knowledge for Direct Connect
20161227 Classmethod Basic Knowledge for Direct Connect20161227 Classmethod Basic Knowledge for Direct Connect
20161227 Classmethod Basic Knowledge for Direct ConnectKazuki Ueki
 
はじめてのWeb of Things
はじめてのWeb of ThingsはじめてのWeb of Things
はじめてのWeb of ThingsSaki Homma
 
WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装Yuta Suzuki
 
Armored core vのオンラインサービスにおけるクラウドサーバー活用事例
Armored core vのオンラインサービスにおけるクラウドサーバー活用事例Armored core vのオンラインサービスにおけるクラウドサーバー活用事例
Armored core vのオンラインサービスにおけるクラウドサーバー活用事例erakazu
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術Toru Yamaguchi
 
Magic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみたMagic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみたNishoMatsusita
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア外道 父
 
シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議Shinra_Technologies
 
Network play on WebRTC DataChannel
Network play on WebRTC DataChannelNetwork play on WebRTC DataChannel
Network play on WebRTC DataChannelYoshiaki Sugimoto
 
クラウドサービスを使って作る動画サイト?
クラウドサービスを使って作る動画サイト?クラウドサービスを使って作る動画サイト?
クラウドサービスを使って作る動画サイト?Daichi Isami
 
情報セキュリティの啓蒙と仮想ネットワーク構築 Dos
情報セキュリティの啓蒙と仮想ネットワーク構築  Dos情報セキュリティの啓蒙と仮想ネットワーク構築  Dos
情報セキュリティの啓蒙と仮想ネットワーク構築 Dosk009c1271
 
GCP Cloud SQLへのデータ移行・連携はSyniti DRにお任せ!
GCP Cloud SQLへのデータ移行・連携はSyniti DRにお任せ!GCP Cloud SQLへのデータ移行・連携はSyniti DRにお任せ!
GCP Cloud SQLへのデータ移行・連携はSyniti DRにお任せ!株式会社クライム
 
Direct accessったい 121222
Direct accessったい 121222Direct accessったい 121222
Direct accessったい 121222wintechq
 
CONBU LL Diver/YAPC::Asia 2014 Network
CONBU LL Diver/YAPC::Asia 2014 NetworkCONBU LL Diver/YAPC::Asia 2014 Network
CONBU LL Diver/YAPC::Asia 2014 NetworkYuya Takahashi
 

Ähnlich wie Unity WebSocket (20)

「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2
「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2
「Tiのソケットで待ってる」Titanium Nagoya Chatroom Vol.2
 
websocket-survery
websocket-surverywebsocket-survery
websocket-survery
 
10th jan 2013_miyazaki
10th jan 2013_miyazaki10th jan 2013_miyazaki
10th jan 2013_miyazaki
 
Microsoft Copilot Studio.pdf
Microsoft Copilot Studio.pdfMicrosoft Copilot Studio.pdf
Microsoft Copilot Studio.pdf
 
【DeepSecurityUserNight】我が家の箱入り娘を世間に晒すのは危険なのでDeepSecurityに見守ってもらった話
【DeepSecurityUserNight】我が家の箱入り娘を世間に晒すのは危険なのでDeepSecurityに見守ってもらった話【DeepSecurityUserNight】我が家の箱入り娘を世間に晒すのは危険なのでDeepSecurityに見守ってもらった話
【DeepSecurityUserNight】我が家の箱入り娘を世間に晒すのは危険なのでDeepSecurityに見守ってもらった話
 
20161227 Classmethod Basic Knowledge for Direct Connect
20161227 Classmethod Basic Knowledge for Direct Connect20161227 Classmethod Basic Knowledge for Direct Connect
20161227 Classmethod Basic Knowledge for Direct Connect
 
はじめてのWeb of Things
はじめてのWeb of ThingsはじめてのWeb of Things
はじめてのWeb of Things
 
WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装WebRTCとPeer.jsを使った実装
WebRTCとPeer.jsを使った実装
 
WebRTCについて
WebRTCについてWebRTCについて
WebRTCについて
 
Armored core vのオンラインサービスにおけるクラウドサーバー活用事例
Armored core vのオンラインサービスにおけるクラウドサーバー活用事例Armored core vのオンラインサービスにおけるクラウドサーバー活用事例
Armored core vのオンラインサービスにおけるクラウドサーバー活用事例
 
革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術革新的ブラウザゲームを支えるプラットフォーム技術
革新的ブラウザゲームを支えるプラットフォーム技術
 
Magic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみたMagic Leap で WebRTC 触ってみた
Magic Leap で WebRTC 触ってみた
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
 
シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議シンラ・テクノロジー第2回クラウドゲーム開発者会議
シンラ・テクノロジー第2回クラウドゲーム開発者会議
 
Network play on WebRTC DataChannel
Network play on WebRTC DataChannelNetwork play on WebRTC DataChannel
Network play on WebRTC DataChannel
 
クラウドサービスを使って作る動画サイト?
クラウドサービスを使って作る動画サイト?クラウドサービスを使って作る動画サイト?
クラウドサービスを使って作る動画サイト?
 
情報セキュリティの啓蒙と仮想ネットワーク構築 Dos
情報セキュリティの啓蒙と仮想ネットワーク構築  Dos情報セキュリティの啓蒙と仮想ネットワーク構築  Dos
情報セキュリティの啓蒙と仮想ネットワーク構築 Dos
 
GCP Cloud SQLへのデータ移行・連携はSyniti DRにお任せ!
GCP Cloud SQLへのデータ移行・連携はSyniti DRにお任せ!GCP Cloud SQLへのデータ移行・連携はSyniti DRにお任せ!
GCP Cloud SQLへのデータ移行・連携はSyniti DRにお任せ!
 
Direct accessったい 121222
Direct accessったい 121222Direct accessったい 121222
Direct accessったい 121222
 
CONBU LL Diver/YAPC::Asia 2014 Network
CONBU LL Diver/YAPC::Asia 2014 NetworkCONBU LL Diver/YAPC::Asia 2014 Network
CONBU LL Diver/YAPC::Asia 2014 Network
 

Kürzlich hochgeladen

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Kürzlich hochgeladen (9)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

Unity WebSocket

  • 1. Unity + WebSocketで広がる オンラインゲームの可能性 株式会社セガ 上原光晶 12年10月4日木曜日 1
  • 2. Contents WebSocketの紹介 WebSocketを使ったデモ(ブラウザ・Unity) WebSocketのメリット・デメリット まとめ 12年10月4日木曜日 2
  • 3. 自己紹介 2006年にシステム屋からアプリ開発者に 2008年頃から、携帯電話向けオンラインゲー ムの主にサーバを担当(iアプリ) 2012年2月にセガへ転職し、現在はUnityを 使ったスマートフォン向けオンラインゲームを 開発中 12年10月4日木曜日 3
  • 5. WebSocketとは コンピュータ・ネットワーク用の通信規格の1 つ。W3CとIETFがウェブサーバーとウェブブ ラウザとの間の通信のために規定を予定して いる双方向通信用の技術規格であり、APIは W3Cが、WebSocket プロトコルはIETFが策定 に関与している。プロトコルの仕様は RFC 6455。TCP上で動く。(Wikipediaより引用) 12年10月4日木曜日 5
  • 8. Unity + WebSocket で何が出来るのか 12年10月4日木曜日 8
  • 10. リアルタイム通信が出来る ゲームサーバ WebSocketの コネクション ユーザA ユーザB 12年10月4日木曜日 10
  • 11. リアルタイム通信が出来る ゲームサーバ ① 移動先を クリック ユーザA ユーザB 12年10月4日木曜日 11
  • 12. リアルタイム通信が出来る ② 移動先座標を ゲームサーバ サーバに通知 ① 移動先を クリック ユーザA ユーザB 12年10月4日木曜日 12
  • 13. リアルタイム通信が出来る ② 移動先座標を ゲームサーバ サーバに通知 ③ 即座に、移動先の 座標を他の クライアントに通知 ① 移動先を クリック ユーザA ユーザB 12年10月4日木曜日 13
  • 14. Unity + WebSocketで、リアルタイムの オンラインゲームが作れるようになる! 12年10月4日木曜日 14
  • 15. Unity + WebSocketで、リアルタイムの オンラインゲームが作れるようになる! とは言え、これまでも数多く、 リアルタイムのオンラインゲームが 存在していた 12年10月4日木曜日 15
  • 16. UO(ウルティマオンライン)や MHF(モンハンフロンティア)、 最近ではDiabloIIIなんてのも出た 12年10月4日木曜日 16
  • 17. 『ファンタシースターオンライン2』 本日正式サービス開始! 12年10月4日木曜日 17
  • 18. 『三国志コンクエスト』 Unityで開発したオンラインゲーム SLG+ACTを融合。ACTはリアルタイム方式 12年10月4日木曜日 18
  • 20. これまでのオンラインゲームは、直接 TCP/IPを使っていた(場合が多い) 12年10月4日木曜日 20
  • 21. これまでのオンラインゲームは、直接 TCP/IPを使っていた(場合が多い) TCP/IPで直接通信するのと、 WebSocketで通信することの違いは? 12年10月4日木曜日 21
  • 22. WebSocketには、TCP/IPを直接使うこ とに対して3つのメリットが発生する。 12年10月4日木曜日 22
  • 24. WebSocketのメリット 1.既存インフラへの影響の少なさ 12年10月4日木曜日 24
  • 25. WebSocketのメリット 1.既存インフラへの影響の少なさ 2.メッセージ単位の送受信 12年10月4日木曜日 25
  • 26. WebSocketのメリット 1.既存インフラへの影響の少なさ 2.メッセージ単位の送受信 3.暗号化 12年10月4日木曜日 26
  • 28. 既存インフラへの影響の少なさ TCP/IPでは、他のプロセスが使っていない専用のポー ト番号で通信を行う場合が多い(35000番ポート等) 12年10月4日木曜日 28
  • 29. 既存インフラへの影響の少なさ TCP/IPでは、他のプロセスが使っていない専用のポー ト番号で通信を行う場合が多い(35000番ポート等) WebSocketサーバは、Webサーバが兼任する場合が多 く、セッション接続にHTTPを利用するため、80/443 番ポートでそのまま接続できる 12年10月4日木曜日 29
  • 30. 既存インフラへの影響の少なさ ゲームサーバ TCP/IPを直接 使う場合、専用 の通信を行うた めの穴を開ける 必要があった クライアント 12年10月4日木曜日 30
  • 31. 既存インフラへの影響の少なさ ゲームサーバ TCP/IPを直接 使う場合、専用 の通信を行うた めの穴を開ける game.server.com:35000 に接続 必要があった クライアント 12年10月4日木曜日 31
  • 32. 既存インフラへの影響の少なさ ゲームサーバ TCP/IPを直接 使う場合、専用 の通信を行うた 35000番ポートへの アクセス許可 めの穴を開ける game.server.com:35000 に接続 必要があった クライアント 12年10月4日木曜日 32
  • 33. 既存インフラへの影響の少なさ ゲームサーバ TCP/IPを直接 35000番ポートへのア クセスをサーバに フォワード 使う場合、専用 の通信を行うた 35000番ポートへの アクセス許可 めの穴を開ける game.server.com:35000 に接続 必要があった クライアント 12年10月4日木曜日 33
  • 34. 既存インフラへの影響の少なさ ゲームサーバ WebSocketは、 HTTPが使える環 境であればそのま ま利用出来る(プ ロキシを通過する ことも可能) クライアント 12年10月4日木曜日 34
  • 35. 既存インフラへの影響の少なさ ゲームサーバ WebSocketは、 HTTPが使える環 境であればそのま ま利用出来る(プ ロキシを通過する ws://game.server.com/wsurl/ に接続 ことも可能) クライアント 12年10月4日木曜日 35
  • 36. 既存インフラへの影響の少なさ ゲームサーバ WebSocketは、 HTTPが使える環 境であればそのま 80番ポートへの ま利用出来る(プ HTTPアクセス ロキシを通過する ws://game.server.com/wsurl/ に接続 ことも可能) クライアント 12年10月4日木曜日 36
  • 37. 既存インフラへの影響の少なさ ゲームサーバ WebSocketは、 80番ポートの WebSocketへの HTTPが使える環 アクセスをサーバに フォワード 境であればそのま 80番ポートへの ま利用出来る(プ HTTPアクセス ロキシを通過する ws://game.server.com/wsurl/ に接続 ことも可能) クライアント 12年10月4日木曜日 37
  • 39. メッセージ単位の送受信 TCP/IPでは、独自のプロトコル仕様を定義し、 送受信処理を実装していた 12年10月4日木曜日 39
  • 40. メッセージ単位の送受信 TCP/IPでは、独自のプロトコル仕様を定義し、 送受信処理を実装していた WebSocketではメッセージ単位の送受信が規定 されており、メッセージを構成する部分はライブ ラリ側で実装される 12年10月4日木曜日 40
  • 41. メッセージ単位の送受信 メッセージID データサイズ データ本体 2byte 2byte XXbyte ソースコード例 for( ; ; ) { short messageId = stream.readShort(); short dataSize = stream.readShort(); byte[] data = new byte[dataSize]; int readSize = 0; while( true ) { // ★ データの読み込みが完了するまでループ readSize += stream.read( data, readSize, dataSize - readSize ); if( readSize >= dataSize ) { break; } } execute( messageId, data ); } 12年10月4日木曜日 41
  • 42. メッセージ単位の送受信 サーバ・クライアントの双方で実装する必要がある。 エラー処理も必要。 12年10月4日木曜日 42
  • 43. メッセージ単位の送受信 サーバ・クライアントの双方で実装する必要がある。 エラー処理も必要。 サーバでは多くのクライアントが接続されるため、負 荷対策やメモリ管理も必要となる。 12年10月4日木曜日 43
  • 44. メッセージ単位の送受信 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-------+-+-------------+-------------------------------+ |F|R|R|R| opcode|M| Payload len | Extended payload length | |I|S|S|S| (4) |A| (7) | (16/64) | |N|V|V|V| |S| | (if payload len==126/127) | | |1|2|3| |K| | | +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - + | Extended payload length continued, if payload len == 127 | + - - - - - - - - - - - - - - - +-------------------------------+ | |Masking-key, if MASK set to 1 | +-------------------------------+-------------------------------+ | Masking-key (continued) | Payload Data | +-------------------------------- - - - - - - - - - - - - - - - + : Payload Data continued ... : + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | Payload Data continued ... | +---------------------------------------------------------------+ WebSocketでは、テキスト or バイナリ形式の データの送受信がプロトコルとして規定されている 12年10月4日木曜日 44
  • 45. メッセージ単位の送受信 ソースコード例 // bytebufferが受信データそのもの protected void onBinaryMessage(ByteBuffer bytebuffer) throws IOException { short messageId = bytebuffer.getShort(); execute(messageId, bytebuffer); } データ受信処理が大幅に簡略化される 12年10月4日木曜日 45
  • 47. 暗号化 HTTPと同様に、WebSocketの暗号化も プロトコルとして規定されている 12年10月4日木曜日 47
  • 48. 暗号化 HTTPと同様に、WebSocketの暗号化も プロトコルとして規定されている http:// => https:// ws:// => wss:// 12年10月4日木曜日 48
  • 49. 暗号化 HTTPと同様に、WebSocketの暗号化も プロトコルとして規定されている http:// => https:// ws:// => wss:// デフォルトポート番号 80 => 443 12年10月4日木曜日 49
  • 50. WebSocketのメリット 既存インフラへの影響の少なさ メッセージ単位の送受信 暗号化 12年10月4日木曜日 50
  • 51. WebSocketのメリット 既存インフラへの影響の少なさ メッセージ単位の送受信 暗号化 これらは、HTTPの特徴でもある 12年10月4日木曜日 51
  • 52. WebSocketのメリット  つまり、TCP/IPの軽量な双方向通信と、 HTTPの利便性の両方のメリットを持つ。 12年10月4日木曜日 52
  • 53. WebSocketのメリット  つまり、TCP/IPの軽量な双方向通信と、 HTTPの利便性の両方のメリットを持つ。  これらは既存でも実現できていたが、非常に 面倒であり、相応の技術力を要していた。 12年10月4日木曜日 53
  • 54. WebSocketのメリット  つまり、TCP/IPの軽量な双方向通信と、 HTTPの利便性の両方のメリットを持つ。  これらは既存でも実現できていたが、非常に 面倒であり、相応の技術力を要していた。 => オンラインゲームの通信部分の 開発のハードルが大幅に下がった 12年10月4日木曜日 54
  • 56. WebSocketのデメリット 現状、考えられるデメリットは2つ。 12年10月4日木曜日 56
  • 57. WebSocketのデメリット 現状、考えられるデメリットは2つ。 1.Request - Response形式が無い 12年10月4日木曜日 57
  • 58. WebSocketのデメリット 現状、考えられるデメリットは2つ。 1.Request - Response形式が無い 2.実績が少ない 12年10月4日木曜日 58
  • 59. Request - Response形式が無い WebSocketでは一方向のメッセージの定 義しか無いため、Request - Response 形式のメッセージの送受信を行う場合 は、独自に実装が必要。 12年10月4日木曜日 59
  • 60. 実績が少ない 2011年12月:RFC6455規定 2012年01月:Jetty対応 2012年02月:node.js対応 2012年03月:Tomcat対応(テスト実装) 2012年06月:UniWeb対応 動作実績は、せいぜい半年程度 12年10月4日木曜日 60
  • 62. デモに至るまで・・・ Tomcat7.0.27�+ Google Chrome => OK 12年10月4日木曜日 62
  • 63. デモに至るまで・・・ Tomcat7.0.27�+ Google Chrome => OK Tomcat7.0.27�+ Unity(websocket-sharp) => プロトコルバージョン不一致により通信不可 12年10月4日木曜日 63
  • 64. デモに至るまで・・・ Tomcat7.0.27�+ Google Chrome => OK Tomcat7.0.27�+ Unity(websocket-sharp) => プロトコルバージョン不一致により通信不可 Tomcat7.0.27�+ Unity(SuperWebSocket) => SuperWebSocket動作せず(VisualStudioだとOK) 12年10月4日木曜日 64
  • 65. デモに至るまで・・・ Tomcat7.0.27�+ Google Chrome => OK Tomcat7.0.27�+ Unity(websocket-sharp) => プロトコルバージョン不一致により通信不可 Tomcat7.0.27�+ Unity(SuperWebSocket) => SuperWebSocket動作せず(VisualStudioだとOK) Jetty8.1.3�+ Unity(websocket-sharp) => OKだがプロトコルバージョンが古い 12年10月4日木曜日 65
  • 66. デモに至るまで・・・ Tomcat7.0.27�+ Google Chrome => OK Tomcat7.0.27�+ Unity(websocket-sharp) => プロトコルバージョン不一致により通信不可 Tomcat7.0.27�+ Unity(SuperWebSocket) => SuperWebSocket動作せず(VisualStudioだとOK) Jetty8.1.3�+ Unity(websocket-sharp) => OKだがプロトコルバージョンが古い Tomcat7.0.27�+ Unity(UniWeb) => いずれかのバグにより動作不可 12年10月4日木曜日 66
  • 67. デモに至るまで・・・ UniWebの以下の箇所を修正したら、うまく動いた! Response.cs 171 cacheable = string.Compare (GetHeader ("Etag"), "", true) != 0; 172 chunked = string.Compare (GetHeader ("Transfer-Encoding"), "chunked", true) == 0; 173 zipped = string.Compare (GetHeader ("Content-Encoding"), "gzip", true) == 0; 174 byte[] buffer = new byte[1024]; 175 chunked = false; // ★★★ この行を挿入 ★★★ 176 177 178 if (chunked) { while (true) { Response.cs 175: chunked = false; 179 // Collect Body 180 var hexLength = ReadLine (inputStream); 12年10月4日木曜日 67
  • 68. デモに至るまで・・・ UniWebの以下の箇所を修正したら、うまく動いた! Response.cs 171 cacheable = string.Compare (GetHeader ("Etag"), "", true) != 0; 172 chunked = string.Compare (GetHeader ("Transfer-Encoding"), "chunked", true) == 0; 173 zipped = string.Compare (GetHeader ("Content-Encoding"), "gzip", true) == 0; 174 byte[] buffer = new byte[1024]; 175 chunked = false; // ★★★ この行を挿入 ★★★ 176 177 178 if (chunked) { while (true) { Response.cs 175: chunked = false; 179 // Collect Body 180 var hexLength = ReadLine (inputStream); まだまだ現時点ではイバラの道 12年10月4日木曜日 68
  • 69. まとめ 現時点では実績の少ないWebSocketだが、オンライ ンゲームを作る上での有用性には確信が持てる (RFC6455にも、「ゲームでも使える」との記述が ある) 今後、オンラインゲームはWebSocketで作るのが当 たり前、という時代が来る!かも知れない・・・ 12年10月4日木曜日 69
  • 70. Unity + WebSocketで、オンライン ゲームの新しい時代を切り拓け!! 12年10月4日木曜日 70
  • 73. デモに至るまで・・・ TomcatがWebSocketを実装した!? => Tomcat7.0.27(3/31リリース)インストール => Google Chromeでチャットの動作確認! 12年10月4日木曜日 73
  • 74. デモに至るまで・・・ TomcatがWebSocketを実装した!? => Tomcat7.0.27(3/31リリース)インストール => Google Chromeでチャットの動作確認! Unityをクライアントにしよう! => Unity + websocket-sharp を使う => バージョン不一致で接続不可 websocket-sharpの更新が1年以上停止していた 12年10月4日木曜日 74
  • 75. デモに至るまで・・・ 他のC#の実装を探す => SuperWebSocketというのがあるらしい => Unityに組み込もうと悪戦苦闘 => VisualStudioでは動くがUnityでは動かず => 技術不足により断念 12年10月4日木曜日 75
  • 76. デモに至るまで・・・ 他のC#の実装を探す => SuperWebSocketというのがあるらしい => Unityに組み込もうと悪戦苦闘 => VisualStudioでは動くがUnityでは動かず => 技術不足により断念 Tomcatを諦めてJettyを試す => 慣れないJettyに戸惑いつつも単体動作完了 => Unity + websocket-sharp とJettyとの通信成功 => 但し、RFC6455ではないのでちょっとモヤモヤ (websocket-sharpが古いため) 12年10月4日木曜日 76
  • 77. デモに至るまで・・・ UnityのAssetであるUniWebが、WebSocketをサポー トしたらしい! => Tomcat7.0.27 + Unity3.5.2 + UniWebを試す => 接続には失敗する・・・が、リクエストは通っており、レ スポンスでエラーとなっているらしい 12年10月4日木曜日 77
  • 78. デモに至るまで・・・ UnityのAssetであるUniWebが、WebSocketをサポー トしたらしい! => Tomcat7.0.27 + Unity3.5.2 + UniWebを試す => 接続には失敗する・・・が、リクエストは通っており、レ スポンスでエラーとなっているらしい Tomcat + UniWebの通信データを解析 => レスポンスの認識違いによるエラーと判明 => 多分Tomcatが悪い・・・が、Tomcatの手直しは難し いので、UniWeb側を修正 12年10月4日木曜日 78