随着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
飞鸟 阅读(585)
评论(0) 编辑 收藏 所属分类:
RIA