AS3SXの裏側

前回のエントリー、AS3SXはPaaSとして成功するかの続き。

AS3版PaaSとも言えるAS3SXですが、サーバ側のシステム構成は少し変わっていることを前回述べました。今回はそのシステムと通信するクライアント側に焦点を当ててみます。

AS3SXのコンセプトを台無しにする方法

前回のエントリーで少しだけ書いたのですが、AS3SXはソケットサーバをフロントに置き、クライアントはそのサーバに直接接続してTCPで通信を行っています(エンドポイントをHTTPに見せてるのは実はフェイク)。

AS3SXはその名前が示すように「クライアントもサーバもAS3で!」というのをコンセプトにサービス提供していますが、普通のTCP通信を行っているなら別に言語に縛られる必要はありません。さらに、実際に送信しているデータはクエリストリング形式の単純なASCIIデータなのでプロトコル解析の必要すらなく、自分の好きな言語で簡単にクライアントが書けます。

好きな言語といってもAS3SXのユーザーが好きな言語は当然ActionScriptだと思います。ただ、Flash Playerを必要としない環境で動作するクライアントが書けると自由にいろいろできるようになります。

例えば Shutdown Time の60分制限を回避する

AS3SXはアプリケーション毎の設定で「Shutdown Time」というものが設けられており、そこで設定した時間(最大60分)の間に新規リクエストがない場合、サーバ側のFlash Playerがシャットダウンされます。60分で勝手に落ちるものを”サーバ”とは到底呼べないので、定期的にハートビートを送ってサーバ側のFlash Playerを落ちないようにしてあげます。

簡単なハートビート送信用クライアントモジュールの実装例を載せます。本当はPHPで書いた方が良かったのかもしれませんが、Perlの方が書き慣れているので。。

* クライアント (client.pl, perl 5.8以降で動作確認)

* AS3SX::Client モジュール (AS3SX/Client.pm, 標準モジュールのみ利用)

* コマンドラインから実行

データパケット内のGUIDに該当する部分を0(0x30)とハイフン(0x2d)で埋めて5秒間隔で送り、サーバ側で session.userId をログに書き出した結果を載せます。ちゃんと足跡が付きました。
(ログのtextareaが等幅フォントになってなくて見にくい、、)

このスクリプトはフォアグラウンドで動くので SIGINT(CTRL+C) で止める必要がありますが、実際はモジュールの heartbeat 内にあるループを取り除いてcronで定期的にキックするか、デーモンにしてバックグラウンドで走らせればいいと思います。

PaaSのようなサービスを開発するに際し、最初はインビテーションで限られたユーザーだけに使ってもらい、フィードバックを経て少しずつ改善していくのが普通だと思います。でもAS3SXはアルファ版と言いつつ誰でも使える状態でいきなり公開しました。さらに、検証中に向こうのサーバに適当なパケットを送ってみたところ、なんかのオンラインゲーム上で使っていると思われるレベルとか経験値などのユーザーデータが返ってきたので、AS3SXだけではなく複数のサービスでサーバを共用しているのでしょう。

“プラットフォーム”を提供するという意識が低いのではと思いました。やはり餅は餅屋ということでしょうか。

あわせて読む:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です