HTML5でゲーム配信とか
はまじしん一ろう
HTML5
次のHTML
HTMLと言いつつ
JSインターフェースとか
DOM/DOM eventなども定義
R.I.P.: XHTML
最近の仕事(らしい)
HTML5
すごいタグ: <video>, <audio>...
細かいタグ: <section>, <article>...
すごいform: <input type="date">, ...
絵をかく: Canvas2D, ...
WebStorage: すごいクッキー
WebSocket: ソケット
Worker: スレッド
AppCache
今回
絵をかく: Canvas2D, ...
WebSocket: ソケット
このふたつ
Canvas2D
普通の2D API
<canvas id="c">
c = document.getElementById("c")
ctx = c.getContext("2d");
ctx.fillStyle = "rgb(255,255,255)"
ctx.fillRect(0, 0, W, H)
Canvas2D実装
IE以外は大丈夫ぽい
IE用のcanvas実装はある(VML)
案外速い
WebSocket
TCPみたいな双方向通信路
最初はHTTPでhandshake
Upgrade: WebSocket
Connection: Upgrade
R.I.P.: Commet, JSONP
WebSocketの通信路
番犬
@socket.write("\\\\x00"+data+"\\\\xff")
文字列長を送るのもあったような
WebSocketの実装
わすれた
WebKitは開発中
Firefoxはpatchとかあったっけ…
今回はFlashでの実装を使ってみた
この2つでゲーム配信
クライアント
サーバから送られてくる
JSをevalするだけ
イベントは全部サーバに送る
ws.onmessage = function(e) {
try {
var canvasElem = $("canvas");
var ctx = canvasElem.getContext("2d");
eval(e.data);
} catch (err) {
output("exception: " + err);
}
};
サーバ
全ロジックの処理
→チートしにくい
画像表示するJSを送りつける
→VNCとかよりは速い
デモ
このプレゼン自体
http://shinh.org/wsock/tc.html
ほげほげ
※これが回ってました
課題 - ネットワーク遅い
毎度コードを送りつけるのでなく
関数を送っておいてデータを
後で送る仕組みなどが必要?
明らかにWebSocket自体にも
なんらかの圧縮が欲しい
課題 - 認証
タブ閉じるだけでアウトなので
コネクションは結構切ってしまう
そのたびにログインは面倒
Cookieがどうなっているか
調べていないけどたぶん
Upgrade時に送られてきている?
課題 - 画像データ
画像データは大きいが
アイコンちゃんを動かす
必要があるので必須
画像をクライアントから
見えるところに置いて
JSで読ませて読み終わったら
使い始める?
課題 - live update
サーバを全く止めずに
アップデートできるとかっこいい
実際問題どうでもいいけど
(Generated by wsock/server/presen.rb)