您还没有登录。现在登录注册

关于AMF与BlazeDS

分类: 编程   |   jeff  发表于:2008-07-24 19:25:57  |   0条评论  |

AMF是Action Message Format的简称,它是flash专有的数据传输格式,简单的可以理解为类似XML这样的数据格式,不过XML是纯文本,任何一种语言都通用,而AMF是二进制数据,为flash专用.

为什么又有新的数据格式?

有XML不够么?跨语言,世界范围的标准.而且一直以来,我们都是使用XML作为Flash与服务器端通讯的,这个AMF好在哪里,而且还是专用的!

AMF在作为一种数据结构,从通用性上来讲,肯定比不过XML,不过这种协议是专门服务于flash的客户端应用程序,它有两个大优点:
一,比XML等传输协议更优秀的传输性能.AMF能够缓解由基于文本导致的传输瓶颈问题.这可以有证据的哦.
二,更少的数据层抽象代码,甚至不需要反序列化的代码.使用XML类的协议编程时,避免不了有一个数据反序列化的过程,使无意义的数据片段变成有意义的Flash对象,数据模型多的时候可不是一件轻松的事情,想象一下,现在完全不用去管XML,只需要定义一个远程对象即可马上调用,这个过程节省多少成本?!

下图是XML与AMF传输过程的对照:

基于上面两个优点,AMF如今获得许多开发人员的认可,不少服务器端语言也提供了AMF的适配框架,如pythonAMF和下面要介绍的BlazeDS.

BlazeDS

BlazeDSAdobe公司亲自开发并开源的AMF-Java适配框架.为flash提供java服务器端的简单远程调用能力和实现java对象与actionScript对象的转换.

使用BlazeDS很简单,其核心是一个服务器端的主配置文件:WEB-INF/flex下面的config.xml.示例片断如下:

xml 代码
 
  1. <destination id="HelloWorld">  
  2.        <properties>  
  3.          <source>HelloWorld</source>  
  4.        </properties>  
  5.  </destination>  

这样在flash客户端可以通过声明一个远程对象"HelloWorld"来调用服务器端的方法获得返回值.

更详细的使用说明有兴趣的同学看文档吧.

另外不得不提的是BlazeDS在消息处理上面比较优秀,客户端可以发送消息到服务器端的同时,BlazeDS会在服务器端把消息主动push到客户端.具体实现暂时没有考究,不过用来做即时通讯的客户端支持还是挺有用的.

问题

被Spring和hibernate惯坏了的java程序员一定很关心:

BlazeDS的配置文件里面可以使用Spring Bean吗?这是我最关心的事情,因为现在的java web程序大部分都采用spring作为基础架构了,许多第三方的工具和框架都提供了spring的兼容方法.这是BlazeDS不能避免的.不过,现在的blazeDS还不是成熟的版本,不知道以后会不会提供?

使用BlazeDS肯定享受不了hibernate的lazyload了!目前看来是不行的.

 

flex编程小心得

分类: 编程   |   jeff  发表于:2008-06-19 22:03:16  |   1条评论  |

从真正学到初步完成作品不过就两天半,大气不敢出,先记一记过程的一些所得.
一,当你用Shape画完一个矩形后,想要给它加上一些类如mouseOver,mouseOut的事件,你发现这个图形居然不支持.其实你需要的是InteractiveObject类或及子类.嗯.有交互性质的对象才会提供这样的事件.可以使用Sprite来代替掉Shape哦.

二,通过设置useHandCursor=true以及buttonMode=true,可使光标移到该对象上面时光标变为手状.

三,其实Dictionary并不比Object好用.new Object()完全当字典用.Dictionary有点娇气.

四,as3解释xml很好很强大.
tag.subtag 获得子结点
tag.@attribute 获得结点属性值
tag.(@id=1).subtag 按条件查找某一个结点
等等...
我是把整个xml加载到内存当作活生生的业务对象来使用了,动不动就查找一下.很过瘾.

五,Shape,Sprite等非控件类的元件不能直接使用addChild()方法将其加到application下面,在flash cs3下可以,flex下的做法是创建一个UIComponent作为这些元件的容器,将这些元件加到该容器中才可行.新手最头疼的是这个,有可能半天搞不清楚为什么明明加了就是不显示,实际上提示了TypeError.

六,通常情况下可以忘记flash的层次结构,最后加进来的元件总在最上面.我的做法是把元件都初始化完,有需要的时候就addChild,需要隐藏就removeChild完事.省去设置层数的烦恼.

七,可以这样来设置鼠标的样式,不过我试完之后发现不适合我 :)
[Embed(source="图标名")]

private var MouseIcon:Class;

private function iinitApp(event:Event):void{

CursorManager.setCursor(MouseIcon);

}

七,文档很重要,特别是livedoc和我最重要的api文档.
http://livedocs.adobe.com/flex/3/
http://livedocs.adobe.com/flex/3/langref/index.html

空气啊空气

分类: 编程   |   jeff  发表于:2008-03-03 00:45:55  |   77条评论  |

毫无疑问,Adobe Air的凌空出世绝对是给RIA领域注入了新鲜血液,名副其实,给开发者带来了新鲜空气。

几天前得知Air的1.0版本的释出,看了些Demo,大喜过望,然后翘起二郎腿就暇想着以后桌面程序开发的几种杀手技:

一、使用现有的浏览器端的Ajax技术开发桌面应用程序。用已经很成熟的Extjs2.0.2来开发可以一举两得,既可在Web上跑,又可在桌面上跑。如果没用过Extjs,没所谓,最原始的Html + Js + Css就可以了,不过为了可以使用离线存储和更多的UI功能,建议使用Adobe自家的spry框架。

二、如果你早早你学了Flex,那也没关系,Air对Flex的兼容更好,毕竟Air和Flex是同门师兄弟。

三、Flash?Action Script?太好了,还是自家人。

四、远程调用方面,Ajax够用了,非得要Webservice的话,还不如用现在流行的REST风格(流行得有点畸形了,都是为REST而REST)的Webservice,基于HTTP,对于Javascript而言,还是XMR罢了。

可以看出Air的野心有多大了吧,直接把Web移到桌面上来了,开发者还不需要学习新的语言或框架,仅对我而言,吸引力还是相当大的。

可是我测试Air应用的时候(包括Extjs2.0.2的Air Sample及著名的Agile Agenda)发现都不能接受中文输入,我使用的是五笔加加和Google拼音。居然连粘贴也不行。不知是否和我机器有关系,真宁愿是我RP有问题。如果真的是不兼容中文输入法,那么,这个“空气”就真的变成空气了。。只能下回再见了~~~

站内搜索

作者简介

jeff

OK Computer!

mail
qq

订阅我

我看我听我读

都有谁评论鸟

Tags

日志分类

友情连接

Power By