AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程


Posted in PHP onMay 10, 2010

它可以使PHP与下述技术无缝通信:
(1) Flash 和 Flex Remoting
(2) JavaScript JSON 和 Ajax JSON
(3) XML 和XML-RPC
什么是RPC
远端程序调用(RPC, Remote Procedure Call) 是一种客户端与服务器端交换数据方式。我们可以调用本地对象带对各种参数方法设置回调并接受调用结果。我们不用关心发送和接收数据的实现细节。实现细节通常是抽象的,就像我们在调用本地方法一样。
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的支持。
简单示例
下面我们通过一个简单的登录示例来对AMFPHP有一个初步的认识,将分别从客户端和服务器端两个部分进行介绍。
一,Flex客户端:
代码

import mx.controls.Alert; 
import mx.rpc.remoting.mxml.RemoteObject; 
import mx.rpc.events.*; 
public var login_remoteObj:RemoteObject = null; 
public function initLoginRemoteObject():void 
{//初始化RemoteObject 
this.login_remoteObj = new RemoteObject(); 
this.login_remoteObj.source = "Login"; 
this.login_remoteObj.destination = "amfphp"; 
this.login_remoteObj.showBusyCursor = true; 
this.login_remoteObj.endpoint = "http://localhost/MyTest/amfphp/gateway.php"; 
this.login_remoteObj.doLogin.addEventListener("result", loginHandler); 
this.login_remoteObj.doLogin.addEventListener("fault", faultHandler); 
} 
public function doLogin():void 
{//登陆操作,向服务器提交数据 
var name:String = this.txtName.text; 
var pwd:String = this.txtPassword.text; 
var data:Array = new Array(); 
data.push(name); 
data.push(pwd); 
this.login_remoteObj.getOperation("doLogin").send(data); 
} 
public function loginHandler(event: ResultEvent):void 
{//处理服务器返回的结果 
var result:Array = event.result as Array; 
var flag:String = result[0]; 
if (flag == "0") { 
Alert.show("登陆失败: " + result[1]); 
} else if (flag == "1") { 
Alert.show("登陆成功: " + result[1]); 
} else if (flag == "-1") { 
Alert.show("异常: " + result[1]); 
} 
} 
public function faultHandler(event: FaultEvent):void 
{//出错处理 
Alert.show("sorry,出错了!!!"); 
} 
}

二,PHP服务器端
1,将amfphp文件夹置于MyTest项目的根目录下,打开浏览器输入下述地址验证amfphp是否安装成功
http://localhost/MyTest/amfphp/gateway.php

amfphp就是通过这个gateway来定位我们的服务类,并将请求转发给这些服务类进行处理的。
2,Login.php文件,包含了处理登陆请求的Login类,此文件置于BusinessLogic目录下
代码
<?php 
class Login 
{ 
public function doLogin($data) 
{ 
$result = array(); 
try { 
$name = array_shift($data); 
$pwd = array_shift($data); 
if ($name == "phinecos" && $pwd == "123") { 
$result[] = "1"; 
$result[] = "you are valid user!"; 
} else { 
$result[] = "0"; 
$result[] = "login failed"; 
} 
} catch (Exception $ex) { 
$result[] = "-1"; 
$result[] = $ex->getMessage(); 
} 
return $result; 
} 
} 
?>

3,将globals.php中的服务路径项修改如下,为amfphp指明服务类所在的目录
$servicesPath = "../BusinessLogic/";

作者:洞庭散人
AMFPHP 下载地址
PHP 相关文章推荐
建立文件交换功能的脚本(一)
Oct 09 PHP
帖几个PHP的无限分类实现想法~
Jan 02 PHP
php 分页函数multi() discuz
Jun 21 PHP
php smarty模版引擎中的缓存应用
Dec 02 PHP
几种有用的变型 PHP中循环语句的用法介绍
Jan 30 PHP
深入PHP magic quotes的详解
Jun 17 PHP
如何写php守护进程(Daemon)
Dec 30 PHP
PHP.vs.JAVA
Apr 29 PHP
Smarty简单生成表单元素的方法示例
May 23 PHP
总结PHP中DateTime的常用方法
Aug 11 PHP
php实现登陆模块功能示例
Oct 20 PHP
Laravel事件监听器用法实例分析
Mar 12 PHP
PHP chmod 函数与批量修改文件目录权限
May 10 #PHP
php file_exists 检查文件或目录是否存在的函数
May 10 #PHP
php disk_free_space 返回目录可用空间
May 10 #PHP
PHP is_dir() 判断给定文件名是否是一个目录
May 10 #PHP
php is_file 判断给定文件名是否为一个正常的文件
May 10 #PHP
php下用cookie统计用户访问网页次数的代码
May 09 #PHP
简单的PHP留言本实例代码
May 09 #PHP
You might like
关于Intype一些小问题的解决办法
2008/03/28 PHP
php 过滤危险html代码
2009/06/29 PHP
PHP实现的封装验证码类详解
2013/06/18 PHP
在Yii框架中使用PHP模板引擎Twig的例子
2014/06/13 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
ThinkPHP 404页面的设置方法
2015/01/14 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
php模板引擎技术简单实现
2016/03/15 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
javascript计时器详解
2015/02/28 Javascript
Bootstrap源码解读表单(2)
2016/12/22 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
js获取form表单中name属性的值
2019/02/27 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
Python建立Map写Excel表实例解析
2018/01/17 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
简单了解Python生成器是什么
2019/07/02 Python
Python实现密钥密码(加解密)实例详解
2020/04/26 Python
call在Python中改进数列的实例讲解
2020/12/09 Python
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
大学生工作推荐信范文
2013/12/02 职场文书
小学毕业感言300字
2014/02/19 职场文书
市场部经理岗位职责
2014/04/10 职场文书
辩护词范文大全
2015/05/21 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
Python实现简单的猜单词
2021/06/15 Python
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android