AS3下Flash Remoting自定义类的实现
来源:互联网 发布:淘宝付款时默认银行卡 编辑:程序博客网 时间:2024/06/06 11:46
摘要:flash技术发展到今天,其语言经历过三个版本,从最简单的实现动画的跳转交互,到如今的大项目的开发。AMF的发展也经历过两个版本,从早期支持AS1.0和AS2.0的AMF0,到现在支持AS3.0的AMF3。该文详细论述了AMF的功能及数据处理过程,并实现简化AMF使用的自定义类。
关键词:FlashRemoting;AMF;EventDispatcher
UndertheAS3FlashRemotingCustomClassestoAchieve
XIONGHuan-yan,XUFang
(JiangxiModernPolytechnicCollege,Nanchang330012,China)
Abstract:Flashtechnologydevelopedtotoday,thelanguagewentthroughthreeversions,fromthesimplestrealizationofthejumpanimationinteractive,totoday’slargeprojectdevelopment.AMFdevelopmenthasalsogonethroughtwoversions,fromearlierAMF0supportAS1.0andAS2.0,tothepresentAMF3supportAS3.0.ThispaperdiscussesindetailthefunctionsofAMFanddataprocessing,andtheuseofsimplifiedAMFcustomclass.
Keywords:FlashRemoting;AMF;EventDispatcher
1FlashRemoting的核心技术:AMF
为了处理复杂数据类型,采用一种独有的方式使Flash与应用服务器间可以来回传送数据势在必行。于是AMF应运而生安装flash播放器。
AMF从早期的AMF0发展到现在的AMF3。AMF3用作AS3.0的默认序列化格式,而AMF0则用作旧版的AS1.0和2.0的序列化格式。在网络传输数据方面,AMF3比AMF0效率更高。AMF3能将int和uint对象作为整数(integer)传输,并且能序列化AS3.0才支持的数据类型,比如ByteArray,XML和IExternalizable等。
2AMF简介
AMF(ActionMessageFormat)是Adobe独家开发出来的通信协议,它采用二进制压缩,序列化、反序列化、传输数据,它是基于http协议的轻量级数据交换协议,从而为Flash播放器与FlashRemoting网关通信提供了一种轻量级的、高效率的通信方式。
AMF可用于FlashRemoting、LocalConnection和FlashCommunicationServer,它最大的特色在于可直接将Flash的内置对象(如Object,Array,String等)传回服务器端,并且在服务器端自动进行解析成适当的对象(如Flash的数组传回PHP时就会自动转换为关联数组),这个特色对开发者最大的好处在于不再需要人工处理“序列化”与“反序列化”的繁复工作,不但精确度更高,同时开发也更省时间。
由于AMF是二进制格式并且编码时经过高度压缩,因此非常适合用来传递大量的资料,根据FlashORB网站的测试(主要针对WebService与FlashRemoting进行测试),当数据量越大时,FlashRemoting的传输效率就越高,远远超过WebService,至于XML、URLLoader,由于使用纯文本的传输方式,效率就更不能与FlashRemoting相提并论了。
3AMF内容处理过程
AMF的内容处理过程大致如下(如图1所示):
1)客户端以POST方式向服务器发送序列化请求数据流flash player 下载;
2)服务器端适配器对接收到的数据流进行反序列化,得到服务器端程序能够识别的数据,并建立一个响应(Response)消息;
3)Debug开始;
4)对反序化后的数据进行各种处理,并得到返回值;
5)对响应流进行序列化;
6)将响应数据流发送Http响应给客户端。
4FlashRemoting的应用
FlashRemoting的调用实现都基于flash.net.NetConnection类和flash.net.Responder类。其中NetConnection类可以调用远程应用程序服务器上的命令;Responder类提供了一个对象,该对象在NetConnection.call()中使用以处理来自与特定操作成功或失败相关的服务器的返回值,使用过程如下:
1)创建远程服务器的连接对象:
var_connection:NetConnection=newNetConnection();
2)创建服务器返回值的处理对象:
_responder=newResponder(onResultHandler,onFaultHandler);
其中:如果对服务器的调用成功并返回结果,则调用自定义函数onResultHandler
如果服务器返回一个错误,则调用自定义函数onFaultHandler
3)连接远程服务器网关:
_connection.connect(“amfphp/getway.php”);
connect()方法并不会立即连接网关URL,如果URL不合法或服务器发生异常,都不会收到错误,直到真正调用方法之后。
4)调用远程服务器上的命令
_connection.call(“classPath.method”,_responder,可选参数列表);
其中:第一个参数用点分隔符格式的路径的形式指定远程服务器的方法
第二个参数指定Responder对象,用于处理服务器的返回值
可选参数列表将若干可选参数传递给第一个参数所指定的方法
5)编写自定义函数onResultHandler和onFaultHandler,分别用来处理成功返回结果或返回一个错误。如下所示:
functiononResultHandler(resultData:*):void{
//resultData为调用成功后返回的结果,其数据类型为返回结果的类型
}
functiononFaultHandler(faultData:Object):void{
//faultData为调用失败后返回的错误对象
//其中faultData.description为调用失败后返回的错误信息
}
5FlashRemoting自定义类
从上述的实现过程来看,利用FlashRemoting调用远程服务器命令,每次都要创建NetConnection和Responder两个对象,并手动实现它们的连接,比较繁琐。为了使得利用FlashRemoting调用远程应用程序服务器上的命令更加方便实用,可创建一个自定义类对其进行封装,完整的实现程序如下:
编写好后,在程序中利用自定义类FlashRemoting调用远程服务器端命令的方法如下(以下以PHP的amfphp为例,实现调用PHP的HelloWorld类中的say方法):
6与后端集成
Flash是前端的界面技术,而后端和数据库交互或大型运算依然需要依托Java、.Net、PHP、Ruby等语言。早在FlashMX的时候Adobe就提出AMF技术,即将Java等语言的对象转换为ActionScript对象的技术规范。Adobe官方推出了DataServices2,支持了AMF等功能,但是价格昂贵。在开源方面,PHP有专门支持的AmfPHP,另外WebORB同时支持.Net、Java、PHP、Ruby。
7结束语
通过AMF协议,Flash可直接访问服务器端返回的数据类型,相比URLLoader返回的单一的String类型,大大节省了类型转换和格式化数据所耗费的大量时间。AMF采用二进制压缩,使得数据在传输时更加安全可靠。
关键词:FlashRemoting;AMF;EventDispatcher
UndertheAS3FlashRemotingCustomClassestoAchieve
XIONGHuan-yan,XUFang
(JiangxiModernPolytechnicCollege,Nanchang330012,China)
Abstract:Flashtechnologydevelopedtotoday,thelanguagewentthroughthreeversions,fromthesimplestrealizationofthejumpanimationinteractive,totoday’slargeprojectdevelopment.AMFdevelopmenthasalsogonethroughtwoversions,fromearlierAMF0supportAS1.0andAS2.0,tothepresentAMF3supportAS3.0.ThispaperdiscussesindetailthefunctionsofAMFanddataprocessing,andtheuseofsimplifiedAMFcustomclass.
Keywords:FlashRemoting;AMF;EventDispatcher
1FlashRemoting的核心技术:AMF
为了处理复杂数据类型,采用一种独有的方式使Flash与应用服务器间可以来回传送数据势在必行。于是AMF应运而生安装flash播放器。
AMF从早期的AMF0发展到现在的AMF3。AMF3用作AS3.0的默认序列化格式,而AMF0则用作旧版的AS1.0和2.0的序列化格式。在网络传输数据方面,AMF3比AMF0效率更高。AMF3能将int和uint对象作为整数(integer)传输,并且能序列化AS3.0才支持的数据类型,比如ByteArray,XML和IExternalizable等。
2AMF简介
AMF(ActionMessageFormat)是Adobe独家开发出来的通信协议,它采用二进制压缩,序列化、反序列化、传输数据,它是基于http协议的轻量级数据交换协议,从而为Flash播放器与FlashRemoting网关通信提供了一种轻量级的、高效率的通信方式。
AMF可用于FlashRemoting、LocalConnection和FlashCommunicationServer,它最大的特色在于可直接将Flash的内置对象(如Object,Array,String等)传回服务器端,并且在服务器端自动进行解析成适当的对象(如Flash的数组传回PHP时就会自动转换为关联数组),这个特色对开发者最大的好处在于不再需要人工处理“序列化”与“反序列化”的繁复工作,不但精确度更高,同时开发也更省时间。
由于AMF是二进制格式并且编码时经过高度压缩,因此非常适合用来传递大量的资料,根据FlashORB网站的测试(主要针对WebService与FlashRemoting进行测试),当数据量越大时,FlashRemoting的传输效率就越高,远远超过WebService,至于XML、URLLoader,由于使用纯文本的传输方式,效率就更不能与FlashRemoting相提并论了。
3AMF内容处理过程
AMF的内容处理过程大致如下(如图1所示):
1)客户端以POST方式向服务器发送序列化请求数据流flash player 下载;
2)服务器端适配器对接收到的数据流进行反序列化,得到服务器端程序能够识别的数据,并建立一个响应(Response)消息;
3)Debug开始;
4)对反序化后的数据进行各种处理,并得到返回值;
5)对响应流进行序列化;
6)将响应数据流发送Http响应给客户端。
4FlashRemoting的应用
FlashRemoting的调用实现都基于flash.net.NetConnection类和flash.net.Responder类。其中NetConnection类可以调用远程应用程序服务器上的命令;Responder类提供了一个对象,该对象在NetConnection.call()中使用以处理来自与特定操作成功或失败相关的服务器的返回值,使用过程如下:
1)创建远程服务器的连接对象:
var_connection:NetConnection=newNetConnection();
2)创建服务器返回值的处理对象:
_responder=newResponder(onResultHandler,onFaultHandler);
其中:如果对服务器的调用成功并返回结果,则调用自定义函数onResultHandler
如果服务器返回一个错误,则调用自定义函数onFaultHandler
3)连接远程服务器网关:
_connection.connect(“amfphp/getway.php”);
connect()方法并不会立即连接网关URL,如果URL不合法或服务器发生异常,都不会收到错误,直到真正调用方法之后。
4)调用远程服务器上的命令
_connection.call(“classPath.method”,_responder,可选参数列表);
其中:第一个参数用点分隔符格式的路径的形式指定远程服务器的方法
第二个参数指定Responder对象,用于处理服务器的返回值
可选参数列表将若干可选参数传递给第一个参数所指定的方法
5)编写自定义函数onResultHandler和onFaultHandler,分别用来处理成功返回结果或返回一个错误。如下所示:
functiononResultHandler(resultData:*):void{
//resultData为调用成功后返回的结果,其数据类型为返回结果的类型
}
functiononFaultHandler(faultData:Object):void{
//faultData为调用失败后返回的错误对象
//其中faultData.description为调用失败后返回的错误信息
}
5FlashRemoting自定义类
从上述的实现过程来看,利用FlashRemoting调用远程服务器命令,每次都要创建NetConnection和Responder两个对象,并手动实现它们的连接,比较繁琐。为了使得利用FlashRemoting调用远程应用程序服务器上的命令更加方便实用,可创建一个自定义类对其进行封装,完整的实现程序如下:
package {import flash.net.NetConnection;import flash.net.Responder;import flash.events.*;//自定义类FlashRemoting继承自EventDispatcher类,使其具有调度事件的功能public class FlashRemoting extends EventDispatcher {private var _conn:NetConnection;private var _responder:Responder;private var _data:*;//存放调用远程服务器命令成功后的返回值 public function FlashRemoting(gateway:String) {_responder = new Responder(onResultHandler,onFaultHandler);_conn=new NetConnection();_conn.connect(gateway);_conn.addEventListener(NetStatusEvent.NET_STATUS,nsHandler);}//调用远程服务器上的命令,第一个参数为服务器命令名, //后面若干可选参数为传递给服务器命令的参数 public function call(classFunc:String, args):void {var parameters:Array = args;parameters.unshift(classFunc,_responder);_conn.call.apply(this,parameters);}//(只读属性)获取调用远程服务器命令成功后的返回值 public function getdata():* {return _data;}//调用成功后接收返回值,并调度Event.COMPLETE事件 private function onResultHandler(resultData:*):void {_data = resultData;var tmpEvt:Event = new Event(Event.COMPLETE);dispatchEvent(tmpEvt);}//调用失败后调度ErrorEvent.ERROR事件 private function onFaultHandler(faultData:Object):void {var tmpEvt:ErrorEvent = new ErrorEvent(ErrorEvent.ERROR);tmpEvt.text = faultData.description;dispatchEvent(tmpEvt);}private function nsHandler(evt:NetStatusEvent):void {trace(evt.info.code);}}}
编写好后,在程序中利用自定义类FlashRemoting调用远程服务器端命令的方法如下(以下以PHP的amfphp为例,实现调用PHP的HelloWorld类中的say方法):
var fr:FlashRemoting = new FlashRemoting("amfphp/gateway.php");fr.addEventListener(Event.COMPLETE,onResultHandler);fr.addEventListener(ErrorEvent.ERROR,onErrorHandler);function onResultHandler(evt:Event):void {trace(evt.target.data);}function onErrorHandler(evt:ErrorEvent):void {trace(evt.text);}fr.call("HelloWorld.say");
6与后端集成
Flash是前端的界面技术,而后端和数据库交互或大型运算依然需要依托Java、.Net、PHP、Ruby等语言。早在FlashMX的时候Adobe就提出AMF技术,即将Java等语言的对象转换为ActionScript对象的技术规范。Adobe官方推出了DataServices2,支持了AMF等功能,但是价格昂贵。在开源方面,PHP有专门支持的AmfPHP,另外WebORB同时支持.Net、Java、PHP、Ruby。
7结束语
通过AMF协议,Flash可直接访问服务器端返回的数据类型,相比URLLoader返回的单一的String类型,大大节省了类型转换和格式化数据所耗费的大量时间。AMF采用二进制压缩,使得数据在传输时更加安全可靠。
- AS3下Flash Remoting自定义类的实现
- Flash(AS3) 实现的3D TileFlow
- 使用Fluorine实现Flash与.NET之间的Remoting通信
- Flash as3 自定义ReadXML类读取xml 【原创】
- Flash Remoting的核心技术:AMF
- Flash Remoting的开发环境
- Flash Remoting的核心技术:AMF
- FLASH AS3全屏类
- FLASH与密码学-常用加密算法的AS3.0实现
- AS3.0 实现FLASH的"动态链接库"
- Flash remoting
- flash as3 的socket聊天
- Flash AS3化骨綿掌之Flash AS3 Compiler的Bug
- 使用Flash Remoting实现Flash与ColdFusion 通信
- Flash AS3)分享一个ActionScript3的倒影类
- 基于 flash AS3.0 的BASE64编码与解码类
- Flash as3.0笔记 Sound类的使用
- Flash Remoting支持的远程服务
- 谁是谁的妈, 谁是谁的爸
- 第五周任务一第三个
- telnet登录Linux
- 【Informatica】使用Normalizer实现数据格式转换
- 再谈shell之“>/dev/null 2>&1”
- AS3下Flash Remoting自定义类的实现
- hdu 2852 KiKi's K-Number
- 我们工作到底为了什么——转自豆瓣
- Supervisor行为
- error: linker command failed with exit code 1 (use -v to see invocation)
- Visual Studio 2010——C#的主菜单的使用
- backup archivelog all delete input 和 backup archivelog all delete all input的区别
- autobook三
- where条件中等值连接使用双竖杠影响SQL性能