SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Adobe Developer Connection(AD)

Flex + LL連携(Ruby、Python、PHP)

  • このエントリーをはてなブックマークに追加

もっと良い方法

 HTTPのGET/POSTメソッドでデータをやり取りする例を見てきました。簡単な処理ですが、それなりの手間は掛かりますね。

 実はFlex・Flashでは、サーバサイドと通信するのに、もっと良い方法があります。それは、サーバサイドで"RPCサービス"を作成して、Flex・Flashから、そのサービスのメソッドを呼ぶやり方です。

 「RPC」とは”Remote Procedure Call”の略で、名前の通り、遠隔にあるプロシージャ(=メソッド)を呼び出しを可能にする技術のことを指します。要は、サーバサイドでサービスを書いて登録すると、クライアントは、ローカルのメソッドを呼ぶのと同じように、サーバサイドのサービスのメソッドを呼ぶことができます。

 RPCで何が嬉しいかというと、まず直感的に使えることがあります。ローカルのメソッドを呼ぶような感覚で、サーバサイドのメソッドが呼べるのは便利です。しかし、更に重要なのは効率です。最初に紹介したGET/POSTを使う方法や、XML/JSONといったテキスト表現でデータを送受信する方法では、サーバ・クライアント間で流れるデータは全てが文字列になってしまいます。これは効率が良くありません。例えば、int型を受け渡すことを考えてみましょう。クライアントサイドからint型の値を送る際、一旦文字列型に変換されます。

int -> 文字列 -> 文字列 -> 文字列 ->int
(クライアント)(サーバ)(クライアント)

 という流れになりますが、文字列型とint型との相互変換が発生するのが無駄です。Flex・FlashのRPC呼び出しで使われるAMFフォーマットは、バイナリ形式のため冗長性が低く、そもそも効率的なデータのやりとりが可能ということもありますが、それだけではなく、Flash Playerがネイティブに扱えるフォーマットというのが重要なポイントです。

 前述の例で言えば、RPC呼び出し時には

int -> int ->int
(クライアント)(サーバ)(クライアント)

 となり、余計な中間オブジェクトが生成されません。クライアントサイドではint型はActionScriptの型からAMFに直接シリアライズされますし、サーバサイドでもAMFからサーバサイドの言語の対応する型にデシリアライズされます。上記の例では軽微な差で、重要性があまり感じられないかもしれませんが、非常に頻繁にデータをやりとりするシステムではこの差が大きく影響してきます。例えば、株価情報を毎秒チェックし続けるクライアントを考えてみてください。

 他にも、高解像度画像など非常に大きなデータを扱うシステムでも、この差が全体のパフォーマンスに大きな影響を与えることでしょう。もしサーバから送られてきた画像がBase64エンコードの文字列なら、文字列を画像に変換するのに多くのメモリを使用しなければなりません。サーバサイドで画像を適切な型(ByteArray)にエンコードしさえすれば、変換の際に必要になるメモリはそもそも不要です。

クライアントサイドの実装

 作成するのは、「HelloWorld」です。クライアントから、"Hello"を送信すると、サーバから"World!"を返すというだけの、ごく単純なサンプルです。

 一口にRPC呼び出しと言っても幾つか実装の選択肢があり、例えばFlexでは、「RemoteObject」というクラスを使うこともできますが、今回の記事では省略します。RPC呼び出しの際に最も基礎となる、「NetConnection」クラス(flash.net.NetConnection)を使って、RPC呼び出しを実行してみましょう。RemoteObjectと違い、NetConnectionは、Flex・Flashの両方にあるクラスですので、このクラスの使い方を把握すれば、Flashでもほぼ同様の手順でRPC呼び出しを実行できます。

画面のイメージ
画面のイメージ

処理の説明

 一番上のラジオボタンで、サーバサイドのサービスのうち、どの言語で実装されたサービスを呼ぶかを選択します。「Send a request」ボタンを押すと、左側の入力エリアに入力された文字列を引数として、サーバの「hello」メソッドを送信します。

 サーバサイドでエラーが発生した場合は下のテキストエリアに、正常に処理された場合は呼び出した結果が上のテキストエリアに表示されます。

次のページ
NetConnectionを使う

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Adobe Developer Connection連載記事一覧

もっと読む

この記事の著者

クラスメソッド株式会社 篠崎 大地(シノザキ ダイチ)

クラスメソッド株式会社(http://www.classmethod.jp/)所属テクニカルスペシャリスト。金融系システムのRIA化を得意とし、日々アーキテクチャー設計と実装に奮闘中。Adobe Certified Flex 2.0 Developer。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4541 2009/11/04 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング