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

关于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

OK Computer!

mail
qq

订阅我

我看我听我读

都有谁评论鸟

Tags

python 音乐 朋友 工作 django java 旅游 生活 丽江 云南 编程 google 2008 中国 年假 摇滚 javascript ajax grails 部署 apache air 学习 卖唱 lucene 技术 体验 发呆 flex 灾害 乐队 plone 灾难 哀悼日 开源 jmesa jquery flash ext web 健康 全文搜索 电影 sql 感情 orm 诗歌 数据库 计划 开发 原创 更新 空间 休假 life 许巍 杭州 鼻炎 moin 真诚 人生 感悟 感性 信息 设计 需求 ria 遇窃 香格里拉 大理 管理 算法 cms nuexo zope 左小诅咒 汉诺塔 AMF prototpye 快速开发 actionscript beautifulSoup 递归 网络 opensource 结婚 捐赠 scrum 软件过程 demo wiki 西片 英伦 中间件 erlang 并发 函数式编程 中文分词 模板 分页 成功 pagerank hibernate 日志 MYMeditor 恐怖 惊变 mysql rss 文艺片 太阳 彩色 factcgi lighttpd editor 中文 个性化 秋天 暴力 美学 声音玩具 独立 备份 数据 琐事 博客 接口 设计模式 地下 广州 dvd 互联网 json 事业 职业 读书 香港 澳门 忧郁 冬天 compass 图表

日志分类

友情连接

Power By