unoh.github.com

Flashの新しい可能生 Asynchronous Flash + XMLSocket

Tue Aug 21 02:26:02 -0700 2007

尾藤正人(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を使って何か実装してみてはどうでしょうか。 今までにない何かが作れるかもしれません。

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