`

[转]关于flex和flash两种平台上面使用AMFPHP进行类映射的问题

阅读更多
AMFPHP是PHP的远程调用(RPC, Remote Procedure Call)工具。它可以使PHP与下述技术无缝通信:
  (1) Flash 和 Flex Remoting
  (2) JavaScript JSON 和 Ajax JSON
  (3) XML 和XML-RPC

AMFPHP的工作原理
  客户端(Flash / Flex)与服务器端(PHP) 使用相同的方式描述方法调用和复杂数据。客户端序列化请求并将它发送到网关AMFPHP。AMFPHP再执行:
  (1) 反序列化请求
  (2) 找到相应的远程服务类
  (3) 实例化类
  (4) 执行安全检查
  (5)(使用指定参数)调用服务器端方法
  (6) 序列化返回的数据
  AMFPHP可以正确地序列化、反序列化复杂类型数据。除了对象和数组,它还支持 resources 数据连接资源,这就意味着我们可以通过调用远程方法简单返回mysql_query,amfphp 会处理这一切。如果平台支持 (目前来说,Flash Remoting 和Flex Remoting),AMFPHP还可以处理循环引用和自定义数据它也支持简单的远程调试。还有AMFPHP附带一个浏览器,它可以在创建客户端代码前测试远程服务。AMFPHP 1.0.1还添加了模板,可以自动生成客户端代码。AMFPHP 1.9 beta更是新增了对AMF3的支持。

以上就是官方解释。
用很明白的话就是客户端发送的数据可以是一个对象,然后经过网络层之后到了服务器端,接受的数据也是个对象,而网络层只能够发送0101 这样的数据也就是说用一种东西将这些二进制的数据给转换成了我们想要的对象。
这个东西就是AMFPHP。
他封装了一些方法,将客户端的AS类和服务器端的数据结构互相映射。
在flex和flash平台上的使用方式是不一样的,要区分开问题才好解决。
首先说在flex平台上:
     RemoteObject和server_config.xml分工合作,访问服务器方法。
     RemoteObject的属性如下:
     id=”ro”;
     fault:发生错误事件的处理。
     showBusyCursor  :显示鼠标busy状态。
     source :服务器端service下面的php文件。
     destination 在server_config.xm文件中设置的destination。
<mx:method name=”getPerson” result=”getPerson_Result(event)” />
<mx:method name=”savePerson” result=”savePerson_Result(event)” />
name指的是source这个类中的方法名称,result指的是方法调用后成功的时候返回的事件。
      调用的方式:
         ro.getPerson();
         ro.savePerson(new person(XXX));
需要注意的地方是,Person是AS3的数据结构,他要和服务器的一个类对应。
在类中使用元标签即可[RemoteClass(alias="远程服务器的类路径")],这个类路径要和as3的person类路径保持一致,连类名也要一样,不然flex不认。在getPerson_Result(event:ResultEvent)的处理中,result就可以直接as Person来使用。

在flash平台上面
     在这上面是不能够使用元标签的RemoteClass的,所以需要使用别的方式,我使用的是registerClassAlias
为类注册一个别名,这个别名必须是Person的类全路径。

public class Person{

    public var name:String
    public var age:int
    public var address:String
    public var _explicitType:String;
        /*
        * Contructor
        */
        public function Person(name:String="", age:int=0, address:String=""){
            this.name = name;
            this.age = age;
            this.address = address;
        }
        static public function register():void
        {
            registerClassAlias("com.flashdb.Person", Person) ;  
        }     但是这样做,flash的Person还是会报错,因为在php的Person.php中有一个必须要有的属性$_explicitType
这个属性是告诉amfphp,这个php要映射成那个as类。在flex中我猜想应该被flex给屏蔽了所以没有输出。但是在flash中他居然也被序列化回来了。所以as3的Person也必须要有这个属性。像我上面那个Person样子就可以,这个时候服务器端发回来的二进制数据被序列化成Person对象,这个时候你会发现,直接使用Person作为返回的参数没有问题。
如下:

var responder = new Responder(getPerson_Result, onFault);
netConnect.call("TestPerson.getPerson", responder);
//这个时候p就是序列化回来的对象了。
function getPerson_Result(p:Person) {
        //trace(p.name,p.age,p.address,p._explicitType)
        trace(p is Person)
        name_txt.text = p.name
        age_txt.text = p.age
        address_txt.text = p.address
        status_txt.text = ""
    }
分享到:
评论

相关推荐

    AMFPHP与flex通讯

    AMFPHP(Action Message Format for PHP)是一种PHP扩展,它允许服务器端的PHP代码与客户端的Flex应用程序进行高效、低延迟的数据交换。Flex是Adobe开发的一款用于构建富互联网应用程序(RIA)的框架,它主要使用...

    amfphp.zip_amfphp_flex_flex php

    标题中的"amfphp.zip_amfphp_flex_flex php"暗示了这是一个关于AMFPHP、Flex以及PHP之间交互的压缩文件。AMFPHP(Action Message Format for PHP)是一种高效的数据交换协议,它允许Flex(一种用于构建富互联网应用...

    flex amfphp1.9

    在Flex中,你可以使用ActionScript类来映射服务器端的服务,这些类通常会继承自`mx.rpc.remoting.RemoteObject`。 在AMFPHP 1.9中,值得注意的是其对AMF0和AMF3两种版本的支持。AMF0是早期的版本,而AMF3则提供了更...

    amfphp.zip_flex

    AMF是Adobe公司开发的一种高效的数据序列化协议,它允许将ActionScript对象快速地序列化为二进制流,从而在客户端(如Flash Player或Flex应用)和服务器之间进行快速、低带宽的数据传输。AMF有两种版本,AMF0和AMF3...

    AMFPHP入门,里面包含php和Flex交互的小demo

    AMFPHP(Action Message Format for PHP)是一种开源的PHP框架,专为PHP和Adobe Flex、Adobe AIR以及Flash Player之间的高效、高性能的双向通信提供服务。它允许开发者在服务器端使用PHP来创建和处理数据,同时在...

    AMFPHP入门教程,flex+php,flash+php

    AMFPHP(Action Message Format for PHP)是一种高效的数据交换协议,它允许Flex、Flash或ActionScript 3.0与PHP应用程序之间进行快速、低开销的通信。在本入门教程中,我们将了解如何安装和使用AMFPHP以及创建简单...

    amfphp1.9,flash

    AMFPHP 1.9 和 Flash 是两个与Web开发密切相关的技术,它们在构建富互联网应用程序(RIA)中发挥着重要作用。AMFPHP 是一个开源的PHP框架,它允许服务器端的PHP代码与客户端的Flash或Flex应用进行高效的数据交换。...

    amfphp-2.1.1.rar

    7. **示例和教程**:提供的使用方法可能包括示例代码和详细教程,指导开发者如何设置和使用AMFPHP,以及如何在Flex项目中集成AMFPHP服务。 在下载的"amfphp-2.1.1.rar"压缩包中,主要包含AMFPHP框架的核心库文件、...

    amfphp 2.1.1

    AMFPHP支持这两种格式,使得PHP服务器可以无缝地与使用AMF的客户端如Flex进行通信。 **AMFPHP的功能与优势** 1. **高性能通信**:AMFPHP通过AMF协议提供低延迟、高效率的数据传输,使PHP服务端和Flex前端之间的交互...

    flext通信之amfphp通信实例源码

    Flex与AMFPHP通信是一种常见的在富互联网应用(RIA)中实现服务器端数据交互的方式。Flex作为Adobe开发的开源框架,主要用于构建具有丰富用户界面的Web应用,而AMFPHP则是一个快速、轻量级的PHP框架,它允许Flex...

    开源PHP代码AMFPHP

    而AMFPHP主要处理的是AMF3,这是在AMF0基础上进行优化的版本,提供了更好的类型支持和压缩能力,被Flex 2及以上版本和Flash Player 10及更高版本广泛采用。 AMFPHP项目不仅实现了AMF协议,还提供了一个服务框架,...

    AMFPHP

    它允许PHP应用程序使用二进制协议(AMF)与Flash、Flex、Air或其他支持AMF的客户端进行通信,从而实现快速、低级别的数据传输。AMFPHP的核心目标是提供一种比传统HTTP或SOAP协议更快、更轻量级的方式来实现Web服务。...

    amfphp-2.2.2.zip

    4. **兼容性**:AMFPHP 2.2.2 应该与各种版本的Flash Player和Flex SDK兼容,同时支持AMF0和AMF3两种AMF版本,以适应不同客户端的需求。 5. **性能优化**:作为成熟版本的2.2.2,AMFPHP可能已经过优化,以减少处理...

    amfphp 1.9

    AMFPHP允许开发者使用PHP服务器端脚本处理来自Flash客户端(如Flex或Flash本身)的请求,从而实现动态内容的交互和数据交换。AMF是一种二进制的序列化格式,它比传统的HTTP或XML更加轻量级,因此在传输大量数据时,...

    Flex 3 基础教程(10)

    AMFPHP 1.9 是当前最新的版本,支持 Flex、Flash 和 AIR 等多种平台。 二、环境搭建 环境搭建是使用 AMFPHP 的前提,需要安装 Apache 2.2、PHP 5.2、MYSQL 5.0 和 AMFPHP 1.9 等组件。目录结构也需要正确配置,以...

    amfPHP-2.0.alpha1.zip_AMFPHP2.0_amf2.0_amfphp_amfphp 2.0_php amf

    2. 文档:关于如何安装、配置和使用AMFPHP的指南,可能包括API参考和示例代码。 3. 示例项目:可能包含演示如何在实际应用中使用AMFPHP的示例代码,帮助开发者快速上手。 4. 测试套件:用于验证AMFPHP功能是否正常...

    amfphp-example

    Flash则是一种广泛应用于网页的多媒体平台,用于播放动画、视频和交互式内容。AMFPHP作为它们之间的桥梁,使得PHP开发者可以利用后端的强大功能,为前端Flex或Flash应用提供动态数据和服务。 **压缩包子文件的文件...

    PHP+Flex+amfphp实现天气预报

    3. amfphp:全称为Action Message Format for PHP,是一个允许PHP和Flash/Flex之间进行高效、二进制数据交换的库。通过AMF,Flex客户端可以与PHP服务器端进行快速的数据通信,提高了性能和响应速度。在天气预报应用...

    myamfphp 实现php与flex交互

    3. **客户端调用**:在Flex应用程序中,可以使用Flash Player提供的`NetConnection`和`RemoteObject`类来连接到myAMFPHP服务器并调用服务。这使得前端可以直接操作后端数据,实现数据的即时更新。 4. **数据类型...

Global site tag (gtag.js) - Google Analytics