自从有了AMF3以来,一直在寻求支持AMF3解码的Remote gateway,找了许久, 之前的OpenAMF只支持AMF0,没有考虑LCDS或是GDS或是Blazeds,因为它们都用到了Flex的消息框架,而加入Flex的消息框架则 会让swf文件本身大小增长近200KB, 当然,你可以说通过json或是xml也可以完成,但是,我不希望有中间层解码的繁琐.于是干脆自己写了一个AMF3的Remote gateway.实现的原理很简单,就是通过URLLoader将AMF3的数据包post到服务器执行服务器端的方法之后又用AMF3数据包返回来.我 将这个项目命名为: openamf3, 并计划在近期内开源.
客户端example如下:
ActionScript代码
- package {
- import flash.display.Sprite;
- import flash.net.registerClassAlias;
-
- import org.openamf3.AMF3Remote;
- import org.openamf3.AMF3RemoteBean;
- import org.openamf3.FaultEvent;
- import org.openamf3.ResultEvent;
-
- public class OpenAMF3Test extends Sprite
- {
- public function OpenAMF3Test()
- {
- var remote:AMF3Remote=new AMF3Remote("http://localhost:8080/OpenAMF3/servlet/gateway");
- remote.addEventListener(FaultEvent.FAILED,onFailed);
- remote.addEventListener(ResultEvent.RESULT,onResult);
- remote.call("org.openamf3.sample.HelloWorld","hello",1);
- }
-
- private function onFailed(event:FaultEvent):void{
- trace("failed:",event.message);
- }
-
- private function onResult(event:ResultEvent):void{
- trace("result:",event.data);
- }
- }
- }
服务器端的test如下:
Java代码
- package org.openamf3.sample;
-
- import java.util.Map;
-
- public class HelloWorld {
- public int hello(Integer value) {
- return 1 + value;
- }
-
- public String hello(String value) {
- return "Hello Wills.Deng" + value;
- }
-
- public Long hello(Long value) {
- return 2 + value;
- }
-
- public Map hello(Map value) {
- value.put("hello", value);
- return value;
- }
-
- public String hello(String[] value) {
- return "Hello Wills.Deng" + value;
- }
- }
执行返回的结果是:
控制台输出:
- [SWF] D:\workSpace\playHut\JavaAMF3\bin-debug\OpenAMF3Test.swf - 4,341 bytes after decompression
- result: 2
上一篇:
FMES将使用RhozetCarbonServer 下一篇:
Flash Media Server心得之一