・適当なアプリを作成
grails create-app flexremote
cd flexremote
・flex pluginをインストール
grails install-plugin flex
・サービスを作成
class BookService {
static expose = ['flex-remoting']
def getBooks() {
return Book.list();
}
}
expose = ['flex-remoting']
にしておくと flex plugin が自動的に amf を配備してくれる。
これをFlex(AIR)側 remoteObject として定義してやると、サービスの中のメソッドが自由に呼べるようになる。
<mx:RemoteObject id="srv"
destination="bookService"
endpoint="http://localhost:8080/flexremote/messagebroker/amf"
result="resultHandler(event)"
fault="faultHandler(event)" />
<mx:Script>
<![CDATA[
srv.getProducts();
]]>
</mx:Script>
desitination はサービス名、endpoint に amf のURLを指定。
GrailsのDomainと同じフィールドを持つ class を作成しておけば、自動的にバインドされてハッピー。
ココにすばらすぃサンプルがあります。
さっくり速度検証もしてみました。
10000件のデータを同じGrailsアプリから blazeDS , WebService , Http(JSON)で投げてみました。
結果は blazeDS の圧勝。
WebServiceも通信部分だけなら早かったんですが、Modelにバインドすると結局 blazeDS の倍ぐらいかかります。
JSONは通信もバインドもかなり差をつけられた感じです、、、
まぁモデルをStringに置き換えてStringをパースして更にモデルにしてと明らかにステップ数が多いのでしょうがないですね。
2 件のコメント:
blazeDSとかのサーバを介さずにAirクライアント同士でポート開けて通信とかってできないのかなぁ。。。
LocalConnectionってのを使うと出来るよ!
Air <-> Air|Flex|Flash
コメントを投稿