SlideShare uma empresa Scribd logo
1 de 19
WebSocketを使ったデモアプリ



201 2年6月30日
静岡Devel opers ' 勉強会
Nod e. js ハンズオン
岸本 誠( @ks makoto )
発表概要



W ebSocketとは
hel l o worl d の解説
デモアプリの解説(通信部分)
簡単な改造
( 余裕があったら) 3D表示の解説
WebSocketとは


AjaxぽいことをやるためのA           PI
HTTPの( TCPの) 1 本のコネクションの中
であれこれやる( cf . comet)
RFC 6455 ( 201 1 Dec1 1 )
JSプログラマが見るべきはW            ebSocket
A ( 現在W
 PI      3Cドラフト)
WebSocket A ( JavaScri pt)
              PI




送信は送りっ放し: voi d s end ( ms g)
受信はイベントハンドラ: onmes s age
ストリームじゃなくてメッセージ指向
preparati onの内容


サーバオブジェクトを作って
s erver. on( イベント名, f uncti on( arg)
{
     // ここにハンドラを書く
} というスタイル
いわゆるechoサーバ
preparati onの内容



s erver. js のほとんどの内容はHTTPサー
バの実装
Nod e用のW    ebSocketの実装として
ws を使用
preparati onの内容



クライアント( JQuery使ってます)
最初のHELOはサーバから来る
サーバに ' hel l o, ' と ' worl d ¥n' を
送り
帰ってきたのをハンドラで受けて表示
デモアプリの内容


クライアント側から解説
s etup_d nd _hand l er
キャンバス要素中のドラッグを拾って
サーバにJSONにして送信
d nd という名前はうっかり(ドロップは
使ってない)
デモアプリの内容


s etup_ms g_recei ver
ctx = キャンバス要素の描画コンテキ
スト
サーバからJSONで
[ メソッド名, 引数0, 引数1 , … ]
というデータが来るのでappl yでそのメ
ソッドを呼ぶ
デモアプリの内容



その他
最初の表示のために、ダミーの[ 0, 0]
 という内容のメッセージを投げている
というわけで、アプリのほとんどは
サーバ側にある
デモアプリの内容



サーバ
HTTPサーバの実装があるのは同じ
quatという変数が、三次元の回転の状
態を保持している(四元数)。あとで
余裕があったらちょっと解説します
デモアプリの内容


bui l d _cmd s がアプリのメイン
クライアントのキャンバスの描画コマ
ンドを、cmd s _bui l d erを使ってまとめ
て作っている
そこから後は3Dグラフィックスのライ
ブラリ。あとで(略)
デモアプリの内容


わかっている問題点
グローバル変数を使っている
サーバなのに複数のクライアントに同
 時に応対できないorz
元々クライアント側のみのアプリのつ
 もりで作ったものをそのまま流用した
 ため
デモアプリの改造



超単純なお絵描きアプリを作ってみま
しょう
bui l d _cmd s の先頭に、簡単な描画サン
 プルがコメントとして置いてあります
まとめ



WebSocketを使うことで、かなり通信を
駆使したアプリが作れます
A に癖があり、特にJSでは、ストリー
 PI
ム指向ではありません
まとめ


Nod e. js と組み合わせると、分散オブ
ジェクトっぽいことができます
(now. js を使うのが楽かも)
サーバをHas kel l で書いたりも
分散オブジェクトについては関さんの
d Ruby本とか高木浩光先生の「xORBを作
ろう」(bi t誌)などを参考に
Quaterni on ( 四元数)



三次元の回転は、座標系(XとYとZの各
軸のベクトル)丸ごとでなくても表現
できる
ロール・ピッチ・ヨーで表現するとジ
ンバルロック(s ee. 『アポロ1 3』)が
Quaterni on ( 四元数)


三次元の、あるベクトルV1 に対し、そ
の回転は、その回転面にある(従属で
ない)ベクトルV2と、
       aV1 + bV2
で計算できる、というのをうまく使っ
て、4要素の数の組で回転が計算でき
る、というのが四元数
3Dライブラリ


表示はワイヤーフレームだが、データ
は向き付けのあるポリゴンの集合とし
て、多面体のデータを持っている
稜線追跡法という手法で、隠線除去を
おこなっているので、SVGでも図を描け
る(ウェブサイトに置いてあるのはそ
の開発途中のデモ)

Mais conteúdo relacionado

Mais procurados

Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumSwift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumTomohiro Kumagai
 
Objective-C のキャストと Swift の型変換を比べてみる #akibaswift
Objective-C のキャストと Swift の型変換を比べてみる #akibaswiftObjective-C のキャストと Swift の型変換を比べてみる #akibaswift
Objective-C のキャストと Swift の型変換を比べてみる #akibaswiftTomohiro Kumagai
 
Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Ryo Suzuki
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回Tomoya Kawanishi
 
Electronについて
ElectronについてElectronについて
Electronについてtomowata
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
みんなで Swift 復習会での談笑用スライド – 4th #minna_de_swift
みんなで Swift 復習会での談笑用スライド – 4th #minna_de_swiftみんなで Swift 復習会での談笑用スライド – 4th #minna_de_swift
みんなで Swift 復習会での談笑用スライド – 4th #minna_de_swiftTomohiro Kumagai
 
ジャパネットQB GPars
ジャパネットQB GParsジャパネットQB GPars
ジャパネットQB GParsTakahiro Sugiura
 
Async design with Unity3D
Async design with Unity3DAsync design with Unity3D
Async design with Unity3DKouji Hosoda
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccYujiSoftware
 
言語処理系入門€10
言語処理系入門€10言語処理系入門€10
言語処理系入門€10Kenta Hattori
 
AVAの話 #mentaicojs
AVAの話 #mentaicojsAVAの話 #mentaicojs
AVAの話 #mentaicojsHiroyuki Anai
 
【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き虎の穴 開発室
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to ObjectsYoshifumi Kawai
 

Mais procurados (19)

Swift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposiumSwift 2.0 大域関数の行方から #swift2symposium
Swift 2.0 大域関数の行方から #swift2symposium
 
Objective-C のキャストと Swift の型変換を比べてみる #akibaswift
Objective-C のキャストと Swift の型変換を比べてみる #akibaswiftObjective-C のキャストと Swift の型変換を比べてみる #akibaswift
Objective-C のキャストと Swift の型変換を比べてみる #akibaswift
 
Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発Siv3Dで楽しむゲームとメディアアート開発
Siv3Dで楽しむゲームとメディアアート開発
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
Cpp cv04
Cpp cv04Cpp cv04
Cpp cv04
 
Unityで覚えるC#
Unityで覚えるC#Unityで覚えるC#
Unityで覚えるC#
 
Electronについて
ElectronについてElectronについて
Electronについて
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
emc++ chapter32
emc++ chapter32emc++ chapter32
emc++ chapter32
 
みんなで Swift 復習会での談笑用スライド – 4th #minna_de_swift
みんなで Swift 復習会での談笑用スライド – 4th #minna_de_swiftみんなで Swift 復習会での談笑用スライド – 4th #minna_de_swift
みんなで Swift 復習会での談笑用スライド – 4th #minna_de_swift
 
ジャパネットQB GPars
ジャパネットQB GParsジャパネットQB GPars
ジャパネットQB GPars
 
Async design with Unity3D
Async design with Unity3DAsync design with Unity3D
Async design with Unity3D
 
CppCV03
CppCV03CppCV03
CppCV03
 
Qt × Reactive Extensions
Qt × Reactive ExtensionsQt × Reactive Extensions
Qt × Reactive Extensions
 
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_cccJEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
 
言語処理系入門€10
言語処理系入門€10言語処理系入門€10
言語処理系入門€10
 
AVAの話 #mentaicojs
AVAの話 #mentaicojsAVAの話 #mentaicojs
AVAの話 #mentaicojs
 
【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き【20220120 toranoana.deno#4】denoでffiの続き
【20220120 toranoana.deno#4】denoでffiの続き
 
An Internal of LINQ to Objects
An Internal of LINQ to ObjectsAn Internal of LINQ to Objects
An Internal of LINQ to Objects
 

Destaque (9)

app-c.odp
app-c.odpapp-c.odp
app-c.odp
 
Shizuoka go lang csp
Shizuoka go lang cspShizuoka go lang csp
Shizuoka go lang csp
 
Tech oyaji ksmakoto_presen
Tech oyaji ksmakoto_presenTech oyaji ksmakoto_presen
Tech oyaji ksmakoto_presen
 
some SHA1 implementation
some SHA1 implementationsome SHA1 implementation
some SHA1 implementation
 
20151121
2015112120151121
20151121
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
FZ and DAZ in denormals
FZ and DAZ in denormalsFZ and DAZ in denormals
FZ and DAZ in denormals
 
CHP survey
CHP surveyCHP survey
CHP survey
 
Visulan intro
Visulan introVisulan intro
Visulan intro
 

Semelhante a Node handson

13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るKiyoshi SATOH
 
Using SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JSUsing SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JSKazuhiro Kotsutsumi
 
Entity Framework 5.0 deep dive
Entity Framework 5.0 deep diveEntity Framework 5.0 deep dive
Entity Framework 5.0 deep diveAtsushi Fukui
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1mganeko
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Yoshifumi Kawai
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう増田 亨
 
[MR03] HoloLens - 真のエンジニアが知るべき実装
[MR03] HoloLens - 真のエンジニアが知るべき実装[MR03] HoloLens - 真のエンジニアが知るべき実装
[MR03] HoloLens - 真のエンジニアが知るべき実装de:code 2017
 
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWINYoshifumi Kawai
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platformToru Yamaguchi
 
後期第七回ネットワークチーム講座資料
後期第七回ネットワークチーム講座資料後期第七回ネットワークチーム講座資料
後期第七回ネットワークチーム講座資料densan_teacher
 
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】WESEEKWESEEK
 
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptxTypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptxssuser8b389c
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium MobileNaoya Ito
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化Gosuke Miyashita
 
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」Kohsuke Kawaguchi
 
Web on Kernel
Web on KernelWeb on Kernel
Web on Kerneldynamis
 

Semelhante a Node handson (20)

13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 
Android T2 on cloud
Android T2 on cloudAndroid T2 on cloud
Android T2 on cloud
 
Using SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JSUsing SockJS(Websocket) with Sencha Ext JS
Using SockJS(Websocket) with Sencha Ext JS
 
Entity Framework 5.0 deep dive
Entity Framework 5.0 deep diveEntity Framework 5.0 deep dive
Entity Framework 5.0 deep dive
 
WebRTC meetup Tokyo 1
WebRTC meetup  Tokyo 1WebRTC meetup  Tokyo 1
WebRTC meetup Tokyo 1
 
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
Metaprogramming Universe in C# - 実例に見るILからRoslynまでの活用例
 
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみようドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
 
[MR03] HoloLens - 真のエンジニアが知るべき実装
[MR03] HoloLens - 真のエンジニアが知るべき実装[MR03] HoloLens - 真のエンジニアが知るべき実装
[MR03] HoloLens - 真のエンジニアが知るべき実装
 
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
 
Inside mobage platform
Inside mobage platformInside mobage platform
Inside mobage platform
 
後期第七回ネットワークチーム講座資料
後期第七回ネットワークチーム講座資料後期第七回ネットワークチーム講座資料
後期第七回ネットワークチーム講座資料
 
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
Rails×React×TS で作るwebアプリ入門【weseek tech conf #10】
 
Clrh 110716 wcfwf
Clrh 110716 wcfwfClrh 110716 wcfwf
Clrh 110716 wcfwf
 
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptxTypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
TypeScriptで書くLambdaをCDKでいい感じに管理する.pptx
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium Mobile
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」ホット・トピック・セミナー「Metro」
ホット・トピック・セミナー「Metro」
 
Vue.js で XSS
Vue.js で XSSVue.js で XSS
Vue.js で XSS
 
Web on Kernel
Web on KernelWeb on Kernel
Web on Kernel
 

Node handson