Rubyを使う
Rubyには、幾つかのオープンソースのAMF実装があります。
- MidnightCoders WebORB for Ruby
- rubyamf
今回はrubyamfを取り上げます。現時点でのRubyAMFの最新版は、1.6.3です。
- rubyamf【http://code.google.com/p/rubyamf/】
RubyAMFの特徴は、WebアプリケーションフレームワークであるRuby on Railsとの連携が容易なことです。
RubyAMFのインストール:
Ruby on Railsをインストールし、railsコマンドでプロジェクトを作成します。
C:\devel\rails>gem install rails C:\devel\rails>rails helloservice C:\devel\rails>cd helloservice
プロジェクトディレクトリに移動し、以下のコマンドを実行すると、RubyAMFがインストールされます。
C:\devel\rails>ruby script/plugin install http://rubyamf.googlecode.com/svn/tags/current/rubyamf
無事にインストール出来たかを確認するために、Webブラウザでgatewayアドレスにアクセスしてみましょう。次のコマンドでWebサーバを起動します。
C:\devel\rails>ruby script/server
RubyAMFのゲートウェイアドレスは、
http://localhost:3000/rubyamf/gateway
です。正常にインストールされていれば、RubyAMFのロゴ画像が表示されます。
RubyAMFでのサービスの実装:
「プロジェクトディレクトリ/app/controllers」以下に、「hello_world_controller.rb」を作成します。クラス名、ファイル名は、Railsの命名規則に従います。
class HelloWorldController < ApplicationController def hello render :amf => "Ruby World! [message from client: " + params[0].to_s.upcase + "]" end end
クライアントから渡された引数には、params
配列でアクセスできます。
RubyAMFの細かい挙動は、「プロジェクトディレクトリ/config/rubyamf_config.rb」で設定できます。一度目を通しておくことをお勧めします。
RubyAMFのサービスの呼び出し:
「クラス名.サービス名」をサービス名として指定し、呼び出します。今回の例では、「HelloWorldController.hello」です。
デバッグのためのツール
クライアント~サーバ間通信は、問題が発生した際にデバッグが難しい個所です。例えば、サーバから受け取ったデータ型を、クライアント側の対応する型に正しくキャスト出来ないケースを考えましょう。
- サーバから返されたデータが期待した内容で届いているのか
- サーバから返されたデータが指定した型になっているのか
- そもそもデータがサーバから届いているのか
このような時に便利なのが、実際に通信されているAMFデータの内容を確認できるモニタリングソフトウェアです。
- Charles【http://www.charlesproxy.com/】
- ServiceCapture【http://kevinlangdon.com/serviceCapture/】
などが代表的です。
下の画面はCharlesのものですが、送受信するAMFの内容を、型情報と共に表示してくれるため、問題の切り分けに効果的です。AMFの生データのHexダンプなど、追加の情報も確認することができます。
終わりに
サーバサイドのサービスをスクリプト言語で記述し、Flexクライアントと通信する簡単な例を紹介してきましたが、いかがでしたでしょうか。意外と簡単にクライアント・サーバ連携が実現できることが伝われば幸いです。
最後に、サーバサイドとの通信を容易にするためのオープンソースのライブラリを幾つか紹介したいと思います。
- AS3 Lightweight Remoting Framework【http://osflash.org/as3lrf】
- SSR(Super Simple Remoting)【http://ssr.riaforge.org/】
作者: Danny Patterson
作者: Aaron Smith
今回のサンプルでは、生のNetConnectionクラスを使って処理を行いましたが、イベントリスナの登録など、定型の処理を記述する必要がありました。これらのライブラリを使うことにより、定型の処理の記述を省くなど、より簡単に通信処理を記述することが出来ます(もちろん、他にもいろいろな機能が提供されています)。
クラスメソッド社では、主にFlex/AIR技術を使ったユーザーインターフェース開発を行っています。また、Flexと連携する様々なサーバーサイドテクノロジーを利用し、多くの業務システム開発を行っています。Flex/AIRを用いたシステム開発を検討されている企業様はお気軽にお問い合わせください。