要するにAMFのデータをJava側で処理する方法です。
しかし、httpのプロトコルを使っての話ではないです。

たとえば、AMF3のデータをBase64してそれを、再度Javaで復元するという感じです。
具体的には、XMLSocketを通じてやりとりをしてみます。
XMLSocketのサーバについてはこちらにて多少説明してあります。
httpプロトコルを使わないのは、Flash側に簡単にpush配信ができるからです。
まあ、ずーとコネクションを張っていますから、そりゃできますよね。

でも、http通信を使ってもクライアント側にpush配信できるソリューションがあるので、
どうやっているのかなーと思ったら、keep-aliveでずーとコネクションを張りっぱなしにしてトンネルするのですね。知りませんでした。
(この方法、XMPPを見ていて知りました。)
そんなことをやろうとも思いもしませんでしたが、確かに、httpサーバを作る側になったときに、
keep-aliveでセッションを張られたときにいったいいつコネクションを切ればいいのかというのが悩みの種という思いをいただいた記憶がありました。
idleタイムとかでやるしかないのでしょうが・・・・めんどくさいです。でもサーバですからね。。。。

それと、PHPなんかには、AMF3のデータを処理するライブラリがたくさんあるのに、Javaにはないのかなーと思っていたら、
本家(Adobe)から出しているので、ないのですね。

さて、それではJavaのライブラリの取得方法は
本家から、BlazeDSのBinaryをダウンロードしてきます。
次に、blazeds.warがありますから、これがZIP圧縮されていますので解凍して、
\blazeds\WEB-INF\lib
にある
flex-messaging-common.jar
flex-messaging-core.jar
を取得して、これをJavaのクラスパスに設定できるようにしておいてください。

さて、AS3側の処理です。簡単なのでかなりはしょっていますが、流れを見ていただければ・・・

var sock:XMLSocket = new XMLSocket();
sock.connect(HOST,PORT);
:
public function send(data:*):void{
	var bytes:ByteArray = new ByteArray();
	bytes.writeObject(data);
	var b64:Base64Encoder = new Base64Encoder();
	b64.encodeBytes(bytes);
	sock.send(b64.toString());
}

のように、どんなオブジェクトでもByteArrayからBase64してXMLSocketへ投げます。これで、as3側はOKです。

次にJava側ですが・・・
再度、XMLSocketのサーバについてはこちらにて多少説明しています、そして、そのソースを再利用しています。

//  ここで送られたBase64の文字列をどうにかして取得する。
String request = (String) e.getMessage();
		
Decoder base64 = new Base64.Decoder();
base64.decode(request);
byte[] data = base64.flush();
ByteArrayInputStream bais = new ByteArrayInputStream(data);
Amf3Input input = new Amf3Input(new SerializationContext());
input.setInputStream(bais);

log.debug("request object:" + input.readObject().getClass());

と、Amf3Inputというオブジェクトを使ってあげればよくて、そこで、readObject()を使えば、オブジェクトが取得できます。
たとえば、AS3のDate型のオブジェクトを渡せば、Javaでは、java.util.Dateの型になるという感じです。

次は、JavaのオブジェクトをAS3側で扱えるようにしてみたいと思います。

お仕事のご依頼・相談を承ります
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら

Leave a Reply

お仕事のご依頼・相談
この記事に関連するお仕事のご依頼やご相談をお待ちしております。 詳しくは、こちら
ソフトウェア&ライブラリ




ライブラリ
airxmail(en)
AIR版メール送受信ライブラリ
airxzip
AIR版ZIP圧縮・解凍ライブラリ
執筆書籍
本、雑誌等

WEB記事:CodeZine
執筆記事はこちら
カレンダー
2010年5月
« 4月   6月 »
 12
3456789
10111213141516
17181920212223
24252627282930
31  

カスタム検索
RSS
Add to Google < !–adsense–>
アーカイブ
カテゴリ
にほんブログ村 IT技術ブログへ