随笔-17  评论-64  文章-79  trackbacks-1
        随着adobe的FLEX和ROMTING的开源化又引起一场的RIA风波,我作为传统的WEB开发人员被其深深的吸引,作为web开发人员很关注flash如何和后台连接,在网上苦苦寻找终于发现了,在AS3下如何和后台通信,其实FLASH ROMTING 和JAVA DWR设计很相似都是通过中间来转化后台和前台对象,今天我就以一个金典的HELLOWORLD程序来展现这个框架。
        首先到http://www.amfphp.org下載AMFPHP1.9,这是目前的最新版本支持AMF3,不像以前的版本1.9版本的部署非常简单解压缩后直接拷贝到apache配置的web下面我这里是D:\develop\WebDev\web\amfphp,然后可以测试一下安装是否成功在地址栏中输入http://localhost:8080/amfphp/gateway.php如果看到第一行amfphp and this gateway are installed correctly. You may now connect to this gateway from Flash。说明安装成功可以进行下一步了。
        然后写后台PHP代码:Hello.php文件
            <?php 
                        class Hello{
                                function sayHello(){       
                                       return "Hello World";
                                 }
                        }
            ?>
        后台代码很简单,用过1.0版本的人可能发现这里没有方法表了(我觉得这个改进使得业务方法和框架解耦了是个非常好的改进),为了简单这里不讲私有gateway.php配置直接调用公有的gateway.php,将Hello.php移动到amfphp\services下面,这样服务器端就完成了。
        下面是客户端的编写:
          无意中在网上发现了一个很好封装flash.net.Responder, flash.net.NetConnection 这两个类的代码这里公布给大家一起学习一下

/*
Remoting类
负责FLASH与数据库交互
*/

package 
{
    import flash.net.Responder;
    import flash.net.NetConnection;

    public class Remoting extends NetConnection 
{
        
/*
        构造
        @param gatewayURL remoting网关地址
        @param amfType 使用AMF3或AMF0
        
*/

        public 
function Remoting(gatewayURL:String,amfType:uint) {
            super();
            
this.objectEncoding=amfType;
            
this.connect(gatewayURL);
        }

        
//##########################################################################
        //
        //方法
        //
        //##########################################################################
        /*
         * 远程返回函数
         * @param remoteMethod:远程类.方法名param远程方法所需要的参数onResultFun:返回数据所调用的方法句柄.onFaultFun同理.
         * 
        
*/

        public 
function respond(remoteMethod:String,onResultFun:*,onFaultFun:*,... param):void {
            
var parameters:Array=param;
            
if (param.length > 0{
                parameters.unshift(remoteMethod,
new Responder(onResultFun,onFaultFun));
                
this.call.apply(this,parameters);
            }
 else {
                
this.call(remoteMethod,new Responder(onResultFun,onFaultFun));
            }

        }

    }

}
        

然后在任何地方可以调用它:

var remote:Remoting;
remote
=new Remoting("http://localhost/remotinggame/gateway.aspx",0);
remote.respond(remoting方法名,onRuslt,onFault,参数1,参数2....);

function onRuslt(re:*):void{
       trace(
" onRuslt:"+re);
}

        
function onFault(fe:*):void{
      trace(
" onFault:"+fe.code);            
}

下面用上面封装的类来实现HELLOWORLD
package {
    import flash.display.Sprite;
    
    
    public class Hello extends Sprite
{
        
        private 
var remoting:Remoting;
        
        public 
function Hello (){
                init();
            }

        
        private 
function init():void{
                remoting
=new Remoting("http://localhost:8080/amfphp/gateway.php",3
);
                remoting.respond(
"Hello.sayHello",onGetData_Ruslt,onGetData_Fault);
          }

        
        private 
function onGetData_Ruslt(re:*):void{
                trace(re
);
           }

        private 
function onGetData_Fault(fe:*):void{
            
for(var what in fe){
                trace(what
+"  fe:"+fe[what]);
            }

        }

    }

}

posted on 2007-12-13 21:52 飞鸟 阅读(584) 评论(0)  编辑  收藏 所属分类: RIA

只有注册用户登录后才能发表评论。


网站导航: