« MySQL オペミスでデータが破損してしまった場合の復旧方法 | メイン | 赤ちゃんの目をシミュレートするテストツール?「TinyEyes」 »

Flashの新しい可能生 Asynchronous Flash + XMLSocket
このエントリーをはてなブックマークに追加 このエントリーをlivedoorクリップに追加

尾藤正人(a.k.a BTO)です

昨日ラボプロジェクトとして実験的に開発している新規プロジェクト「プラッシュ」をβ公開しました。 簡単に説明するとプラッシュはFlashとXMLSocketを使う事でブラウザだけでネットワーク対戦ができるゲームポータルサイトです。 今回はプラッシュで使われているFlashとXMLSocketを使ったアプローチについて考察してみたいと思います。

はじめに

正直に告白すると僕はFlashを一行も書いた事がありません。(汗) なので、Flashの部分に関してはFlash側の開発者であるyossyに聞いたり、Webで調べた情報がほとんどです。 不正確な情報が含まれてる可能性がありますが、その辺を考慮していただければと思います。

FlashのXMLSocketで何ができるのか

FlashのXMLSocketを使うと直接ソケット通信を行う事ができます。 AjaxやCometのような技術は元々ステートレスなHTTP上で非同期通信を実現していますが、 XMLSocketは直接ソケットを叩けるので自然な非同期通信を行う事ができます。 AjaxやCometはデータのやり取りをする度にコネクションが切れますが、XMLSocketはずっとコネクションをはったまま通信を行います。

通信の度にコネクションを確立するアプローチだと、毎回接続するためのコストがかかります。 XMLSocketはずっとコネクションをはっているので、通信の度に接続する必要がなく、よりリアルタイムな通信を実現する事ができます。 プラッシュではそれをネットワーク対戦ゲームに応用しました。

Flashを使ったリアルタイム通信で何ができるのか

それは僕にもわかりませんが、大いなる可能生は感じています。 Flashを使う最大のメリットはブラウザだけで動作する事です。 それにリアルタイム通信が加わった時に、従来ブラウザだけではできなかったことがブラウザだけでできるようになり、新たなる市場が開拓されるかもしれません。

何が必要なのか

FlashでXMLSocketを使用した通信を行うには次のものが必要です。
・Flash Player 5以降
・XMLSocketサーバ
・プロトコル

Flash Player 5以降

Flash Player 5以降でないとXMLSocketは使えないそうです。

XMLSocketサーバ

XMLSocketは直接ソケットを叩くので、独立したサーバが必要になります。 プラッシュではオリジナルのXMLSocketサーバを開発しました。

プロトコル

XMLSocketでの通信はソケットを直接叩くので具体的なデータのやり取りについては定められていません。 汎用的なプロトコルは存在しないので、クライアント側、サーバ側であらかじめ決められたプロトコルを定めて通信を行う事になります。 プラッシュではXMLをベースにした独自プロトコルで通信を行っています。

Flash+XMLSocketを使った既存の実装は

Flash+XMLSocketを使ったチャットの実装はいくつか公開されているようです。 それ以上本格的なものはなかなか見つからないのが現状です。

天鳳というオンライン麻雀がありますが、これはFlash+XMLSocketで作られています。 天鳳は大変素晴らしい実装なので一度遊んでみるといいと思います。

Flash+XMLSocketをもっと普及させるには

Flash+XMLSocketを使ったリアルタイム通信は古くから存在するにも関わらず、それほど注目されていませんでした。 僕はこの技術に大いなる可能生を感じていて、もっと広く普及しないかなと思っています。 そこでこの技術が普及するために何が必要かを考えてみました。

名前をつける

技術がより一般的になるためには呼びやすい名前が必要です。 「FlashとXMLSocketを使ってリアルタイム通信するやつ」なんてのはかったるくて呼びづらい。 何か良い名前はないでしょうか。

開発の敷居を下げる

より多くの実装が出てくるには開発の敷居を下げる事が重要。 開発の敷居を下げるために必要なことをつらつらと書いてみます。

フリーの汎用的なXMLSocketサーバ

既にXMLSocketサーバの実装はいくつかあるようですが、開発が止まっていたり、チャットに特化しているのが実情のようです。 フリーで汎用的なXMLSocketサーバがあれば開発の敷居を大きく下げる事ができると思っています。

モジュールのような形でプログラムを書く事ができて、LLで実装できるようなやつ。 プラッシュではRubyでXMLSocketサーバを書いてます。 LLでもうまくやれば十分サーバの開発は可能です。

汎用的なプロトコル

実装するたびに毎回独自プロトコルを作るのは大変ですから、汎用的なプロトコルが欲しいところ。 汎用的で可読性が高くて単純で拡張性が高いプロトコルがいいかなと思っています。 汎用的なプロトコルを定義するだけでなく、もちろんそれをベースにしたFlashライブラリ、XMLSocketサーバの実装も必要です。

まとめ

みなさんもFlash+XMLSocketを使って何か実装してみてはどうでしょうか。 今までにない何かが作れるかもしれません。

今回プラッシュで作った成果物は何らかの形でうまく公開できないか思案中です。 公開する時には、またこのブログで紹介したいと思います。

トラックバック

このエントリーのトラックバックURL:
http://www.unoh.net/mt32/mt-tb.cgi/938

この一覧は、次のエントリーを参照しています: Flashの新しい可能生 Asynchronous Flash + XMLSocket:

» 昨日の気になった記事 2007/08/22 - Google Earthでプラネタリウムほか from Desire for wealth
Google Earthに「宇宙を眺める」新機能 地図屋に続いてプラネタリウムソフト屋も青くなってる頃か。「現在位置の星空を見る」なんてかっこよすぎる。 ... [詳しくはこちら]

コメント

これが広まらない理由は簡単で、レンタル鯖で誰でも使える「フリーの汎用的なXMLSocketサーバ」がないからでしょう。
ASが書けてもXMLSocketサーバは書けないってことです。

ぜひ「フリーの汎用的なXMLSocketサーバ」を公開してください。

FraXS

クリエイトウェーブ開発日記 XMLSocketサーバーお試し版公開
http://createwave.blog104.fc2.com/blog-entry-24.html

こんなものもあるんですね

> うえさん
頑張ります!!

> Anonymousさん
ありがとうございます!!

> kodakaさん
これは知りませんでした
情報ありがとうございます!!
しかもアクティブに開発しているみたいですね

CometではC10Kと呼ばれる問題があるそうですが、XML+Socket方式ではそちらの懸念は不要なのでしょうか。

技術的な相違点などは・・・

> こにちはさん

C10K問題はクライアントが多くなるとプロセスやスレッドの生成、コンテキストスイッチのコストが大きくなる問題なので、Cometに限った話ではなくなります。
Cometだと問題が顕在化しやすいですが。
もちろんXMLSocketを使う場合でもComet同様にC10K問題は克服すべき重要な課題であると認識しています。
プラッシュのXMLSocketサーバではselect(2)を使ってIOを並列化することで対策をしています。

コメントを投稿


画像の中に見える文字を入力してください。