SlideShare a Scribd company logo
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でも図を描け
る(ウェブサイトに置いてあるのはそ
の開発途中のデモ)

More Related Content

PPTX
ぱっと見でわかるC++11
PPTX
Boost17 cpplinq
PDF
Hello Dark-Side C# (Part. 1)
PPTX
GoF デザインパターン 2009
PDF
Go conference 2017 Lightning talk
PPTX
RuntimeUnitTestToolkit for Unity
PDF
PDF
Swift 2.0 大域関数の行方から #swift2symposium
ぱっと見でわかるC++11
Boost17 cpplinq
Hello Dark-Side C# (Part. 1)
GoF デザインパターン 2009
Go conference 2017 Lightning talk
RuntimeUnitTestToolkit for Unity
Swift 2.0 大域関数の行方から #swift2symposium

What's hot (18)

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

Viewers also liked (9)

ODP
app-c.odp
PDF
Shizuoka go lang csp
PDF
Tech oyaji ksmakoto_presen
PDF
some SHA1 implementation
PDF
PDF
Subprocess no susume
ODP
FZ and DAZ in denormals
PDF
CHP survey
PDF
Visulan intro
app-c.odp
Shizuoka go lang csp
Tech oyaji ksmakoto_presen
some SHA1 implementation
Subprocess no susume
FZ and DAZ in denormals
CHP survey
Visulan intro
Ad

Similar to Node handson (20)

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

Node handson