AS3下Flash Remoting自定义类的实现

本文探讨了AMF协议在FlashRemoting中的作用及其数据处理流程,并实现了自定义类简化AMF使用。AMF使Flash能高效地与服务器端进行数据交换,特别适合于处理复杂数据类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  摘要: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调用远程应用程序服务器上的命令更加方便实用,可创建一个自定义类对其进行封装,完整的实现程序如下:
  
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采用二进制压缩,使得数据在传输时更加安全可靠。
标题基于SpringBoot+Vue的学生交流互助平台研究AI更换标题第1章引言介绍学生交流互助平台的研究背景、意义、现状、方法与创新点。1.1研究背景与意义分析学生交流互助平台在当前教育环境下的需求及其重要性。1.2国内外研究现状综述国内外在学生交流互助平台方面的研究进展与实践应用。1.3研究方法与创新点概述本研究采用的方法论、技术路线及预期的创新成果。第2章相关理论阐述SpringBoot与Vue框架的理论基础及在学生交流互助平台中的应用。2.1SpringBoot框架概述介绍SpringBoot框架的核心思想、特点及优势。2.2Vue框架概述阐述Vue框架的基本原理、组件化开发思想及与前端的交互机制。2.3SpringBoot与Vue的整合应用探讨SpringBoot与Vue在学生交流互助平台中的整合方式及优势。第3章平台需求分析深入分析学生交流互助平台的功能需求、非功能需求及用户体验要求。3.1功能需求分析详细阐述平台的各项功能需求,如用户管理、信息交流、互助学习等。3.2非功能需求分析对平台的性能、安全性、可扩展性等非功能需求进行分析。3.3用户体验要求从用户角度出发,提出平台在易用性、美观性等方面的要求。第4章平台设计与实现具体描述学生交流互助平台的架构设计、功能实现及前后端交互细节。4.1平台架构设计给出平台的整体架构设计,包括前后端分离、微服务架构等思想的应用。4.2功能模块实现详细阐述各个功能模块的实现过程,如用户登录注册、信息发布与查看、在线交流等。4.3前后端交互细节介绍前后端数据交互的方式、接口设计及数据传输过程中的安全问题。第5章平台测试与优化对平台进行全面的测试,发现并解决潜在问题,同时进行优化以提高性能。5.1测试环境与方案介绍测试环境的搭建及所采用的测试方案,包括单元测试、集成测试等。5.2测试结果分析对测试结果进行详细分析,找出问题的根源并
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值