OpenIL vol.1

43
SMARTPHONE CONTROLLER OpenIL vol.1 中川 武憲

description

http://www.infiniteloop.co.jp/blog/2014/02/publicstudy01/

Transcript of OpenIL vol.1

Page 1: OpenIL vol.1

SMARTPHONE CONTROLLEROpenIL vol.1

中川 武憲

Page 2: OpenIL vol.1

自己紹介• var age = 19 歳 (誕生日 2/24)

• 北海道工業大学 学部 2 年生

• インフィニットループ アルバイト

• 趣味は旅行、写真、プログラミング

• Web Developer

Page 3: OpenIL vol.1

あと 3 日で

age++するイベントが。

Page 4: OpenIL vol.1

p.tl/53x8 24 時間受付中

Page 5: OpenIL vol.1

WORKS

• IT 勉強会カレンダー for Android & iOS

• Image Shortener - [img.ww24.jp]

• Realtime Chat - [rtc.ww24.jp]

• Connect Smartphone - [connect-sp.ww24.jp]

Page 6: OpenIL vol.1

IT 勉強会カレンダースマートフォンアプリ

Page 7: OpenIL vol.1

IMAGE SHORTENER短縮 URL を利用したオンラインストレージ

Page 8: OpenIL vol.1

REALTIME CHATGoogle Drive Realtime API を利用した Chat

Page 9: OpenIL vol.1

CONNECT SMARTPHONEパソコンとスマホのリアルタイム連携

Page 10: OpenIL vol.1

CONNECT SMARTPHONE

Page 11: OpenIL vol.1

CONNECT SMARTPHONE

• Express.IO を使った、スマートフォンとパソコンのリアルタイムな連携アプリケーション

Page 12: OpenIL vol.1

AGENDA• リアルタイムな連携とは

• Express と Socket.IO

• 仕組み

• デモ

• サンプルコード

• 問題点、課題

Page 13: OpenIL vol.1

CONNECT SMARTPHONE• リアルタイムな連携の例

• Chrome World Wide Maze

• https://chrome.com/maze/

• jsdo.it WebSocket Controller

• http://jsdo.it/controller

Page 14: OpenIL vol.1

CHROME WORLD WIDE MAZEGoogle の迷路ゲーム

Page 15: OpenIL vol.1

WEBSOCKET CONTROLLERjsdo.it

Page 16: OpenIL vol.1

CONNECT SMARTPHONEスマートフォンをパソコンへ繋げて、コントローラに。

Page 17: OpenIL vol.1

CONNECT SMARTPHONE

• 仕組み

• WebSocket Server (Socket.IO)

• Web Application Server (Express.js)

• Socket.IO + Express.js = Express.IO

Page 18: OpenIL vol.1

金の EXPRESS物語調で解説

Page 19: OpenIL vol.1

EXPRESS と SOCKET.IO

あるプログラマがコードを書いていたところ、 git commit する前に手が滑ってエディタごと落としてしまいました。!すると、突然女神が現れ「あなたが落としたのは金の express ですか?それとも銀の

Socket.IO ですか?」と尋ねてきました。

Page 20: OpenIL vol.1

EXPRESS と SOCKET.IO

正直者のプログラマは、「私が落としたのは生の WebSocket で通信するスパゲッティコードです」と答えます。

Page 21: OpenIL vol.1

EXPRESS と SOCKET.IO

正直者のプログラマに感心した女神は、! express と Socket.IO を掛け合わせた、 express.io をプログラマに授けるのでした。

本題と無関係です。

Page 22: OpenIL vol.1
Page 23: OpenIL vol.1

EXPRESS.IO

express のような直感的なルーティング express と共有できるセッション

Page 24: OpenIL vol.1

CONNECT SMARTPHONE

/connect/{connection_id} にリダイレクト

接 続 処 理

アプリケーション・ゲームページにリダイレクト

Page 25: OpenIL vol.1

CONNECT SMARTPHONEConnect Smartphone

Smartphone(子端末)

PC(親端末)

Game Page

122

3

3

/connect/KCL98U

Page 26: OpenIL vol.1

CONNECT SMARTPHONEConnect Smartphone

Smartphone(子端末)

PC(親端末)

Game Page

Socket.IO

Page 27: OpenIL vol.1

CONNECT SMARTPHONE

• Connect Smartphone での接続処理

• 乱数から connection_id 生成

• 親端末と子端末を connection_id で照合

• 親端末に接続端末(子端末)の一覧を表示

Page 28: OpenIL vol.1
Page 29: OpenIL vol.1
Page 30: OpenIL vol.1
Page 31: OpenIL vol.1
Page 32: OpenIL vol.1

DEMOconnect-sp.ww24.jp

Page 33: OpenIL vol.1

サンプルコード

Page 34: OpenIL vol.1

接続

Page 35: OpenIL vol.1

送信 (子端末)

Page 36: OpenIL vol.1

受信 (親端末)

Page 37: OpenIL vol.1

CONNECT SMARTPHONE• 問題点

• 同じブラウザで 2 画面開くと、全く同じセッション情報を持っているので、どちらが親か判別できない

!

!

先に接続してきた方が親で良いよね!

たまにバグる

Page 38: OpenIL vol.1

両方子端末と判定されることがある。

Page 39: OpenIL vol.1

CONNECT SMARTPHONE• なぜそうなるか…

• HTTP リクエストはステートレス。状態を持たない。状態を持たせるためにセッションを用いる。

• WebSocket 通信はステートフル。コネクション毎に個々に状態を保持できる。ブラウザが同じであっても、親端末か子端末か判定可能。

Page 40: OpenIL vol.1

CONNECT SMARTPHONE• リダイレクトさせる実装にした理由

• スタンドアロンな実装を目指した

• サーバの実装不要でリアルタイム連携を実現

• URL ルーティングや子端末の認証など、面倒な処理を一括して行った

Page 41: OpenIL vol.1

今後の課題

• 自動的に認証したい

• パソコン⇔スマホに限らず、

ゲームでプレイヤーマッチングもできそう

Page 42: OpenIL vol.1

リアルタイム通信楽しい!

Page 43: OpenIL vol.1

express.io で

快適なリアルタイム通信ライフを