zoukankan      html  css  js  c++  java
  • PHP的AMF服务端的开发

     原文:http://bbs.9ria.com/thread-5157-1-1.html

     今天是比较多的时间来写一些教程来告诉大家如何使用PHP来开发AMF服务端了...


    AMF协议的支持,我们不需要从头开始做,当然如果你了解PHP的SOAP支持,也可以自己做;我这里就介绍利用 AMFPHP 来开发AMF服务端.

    首先下载AMFPHP的地址是 http://sourceforge.net/project/showfiles.php?group_id=72483#files  
    amfphp官网地址是  http://www.amfphp.org/

    把下载下来的文件解开,基本目录结构是



    其中要注意的是 services 目录,这个目录就是放置我们把开发好的服务端代码的,你可以开发单个文件的服务直接放到此目录下,也可以专门建立一个目录存放你的服务端代码。

    而目录 browser 则是调试我们的 amf 服务端代码的工具目录(amfphp/browser/index.html),大家访问此文件就知道了。

    这里要提醒下,此文讨论的是 amf 协议最新的 amf3 协议 ,以及AMFPHP运行在PHP5.x以上的版本。

    假设建立一个服务文件  terry_services.php 并以此文件名为类名。(注意服务都需要写成类,且和文件名一样,否则服务不了)

    1. <?php
    2. class terry_services
    3. {
    4.         function dosmth($obj)
    5.         {
    6.                 return 'services return string';
    7.         }
    8. }
    9. ?>
    复制代码
    然后我们访问 amfphp/browser/index.html (第一次访问需要设置AMF协议,这里选 AFM3,确定后就可以了),看下图



    如上图,我们可以看见左边的服务列表中,多了 terry_services 这个 "服务对象",这个服务对象有一个方法 "dosmth”,这个方法有一个参数 "obj"。

    我们可以在参数填写部分写入数据,并点击 "call" 按钮来调用服务对象的方法。如下图



    可以看到我们执行的效果,返回结果在 标签 "results" 中可以看见,正是我们 php 代码中所写的返回结果。

    这里顺便介绍下几个标签页中对应的数据信息
    Info:  调用执行情况(调用执行时间等信息)
    Results: 返回结果
    Tree:   以树的方式显示结果
    Recordset view: 数据集结果观察器
    Trace: 调试信息返回观察器

    我们继续修改PHP端代码,给函数加几个传入参数,并返回一个数组,看看会是什么样子的
    1. <?php
    2. class terry_services
    3. {
    4.         function dosmth($obj, $param2, $param3)
    5.         {
    6.                 $return_array = array();
    7.                 $return_array['get_obj'] = $obj;
    8.                 $return_array['get_p2'] = $param2;
    9.                 $return_array['get_p3'] = $param3;

    10.                 return $return_array;
    11.         }
    12. }
    13. ?>
    复制代码
    点刷新图标按钮刷新后看到下图效果(不是浏览器刷新按钮哦)


    上图可以看见三个参数,以及对应的输入框

    分别填写一些数据,执行看效果如下图:


    好了,看见了数组返回结果了吗? 就是一个AS的对象,在AS3里可以当 数组用,也可以当对象用。我们再看看 Tree标签里显示的是什么

    看到这里读者应该清楚这个工具的使用,以及服务端代码写法了吧。具体服务端的开发模式,这里不作介绍,以后看有需要再写吧。。。

    也许看到这里,大家有一个疑问,就是如果要传递一个对象,如何使用工具来调试呢?
    我把服务对象的方法  "dosmth" 修改成一开始的单参数结构
    1. <?php
    2. class terry_services
    3. {
    4.         function dosmth($obj)
    5.         {
    6.                 return $obj;
    7.         }
    8. }
    9. ?>
    复制代码
    这个代码可以看出直接把对象返回给客户端的。我要告诉大家怎么使用这个工具来调试传入对象。
    这里大家要知道一个概念 "JSON”,具体大家可以去查资料,大概意思就是 javascript 中的对象结构的串化的方式
    如一个javascript数组:
    a['one']='onev';
    a['two']=2;
    把这个数组串化(序列化)后的结果就是 {"one":"onev","two":2},其实就是用大括号,双引号,冒号来表示数组,传递后,并还原。
    这里调试工具支持参数以 JSON 的方式传入,它会自动解析成数组对象,并传递到服务端。


    好了~~ 服务端也知道怎么写了,参数也知道怎么传入了,对象也知道怎么调试了,接下来最后一步就是如何在客户端使用AFM协议和服务端的PHP代码进行通讯了。

    AS3里有一个类 NetConnection,它是支持AMF协议的,AS3里它支持的AMF3协议。
    主要使用到它的 connect方法和call方法
    参数结构如下:
    NetConnection.connect(服务地址)
    NetConnection.call('目录 . 对象 . 方法名', 回调对象, 参数, [参数2], [参数3] ...)
    这里 call 从第但个参数开始的参数,都是传给服务端的服务对象的方法的

    看如下客户端的代码:
    1. var callBack = new Object();
    2. callBack.onResult = function(return_value:Object)
    3. {
    4.     //...
    5. }

    6. var _nc: NetConnection = new NetConnection();
    7. _nc.connect('http://www.example.com/amfphp/gateway.php');               
    8. _nc.call('terry_services.dosmth', callBack, param);
    复制代码
    注意 connect 连接的是amfphp下 gateway.php (这个是固定的)
    具体使用哪个服务对象以及方法,在 call 中的第一个参数指定,如果你的服务对象在更深级的目录总,则以 . (点) 来描述深度
    如果 terry_services.php 的目录路径为 amfphp/services/ terry/terry_services.php 则这里 call的第一个参数为 'terry.terry_services.dosmth'

    call 的第二个参数为服务端返回数据后,NetConnection 回调的对象,这个回调对象必须有一个固定的方法 onResult(param:Object);在这个方法里,你可以对服务端返回的数据进行处理。。。

    基本上就是这样一个开发过程,我就不附上客户端的源码了(偶本本没装FLASH)。。。

  • 相关阅读:
    什么是用户画像?具体公司体现在哪?什么作用呢?
    用户画像后台表设计
    【转载】Oracle Spatial中SDO_Geometry详细说明
    【转载】ArcGIS中的WKID
    MyBatis 判断条件为等于的时候,常量需要加 .toString()
    Oracle最大进程连接数问题
    JAVA WEB基础巩固之Json、Ajax
    Eclipse常用功能
    UML类图学习
    由uploadfive看servlet
  • 原文地址:https://www.cnblogs.com/yangjian/p/1932731.html
Copyright © 2011-2022 走看看