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 相关文章推荐
php HtmlReplace输入过滤安全函数
Jul 03 PHP
IIS7.X配置PHP运行环境小结
Jun 09 PHP
php广告加载类用法实例
Sep 23 PHP
php支持中文字符串分割的函数
May 28 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
使用php完成常见的文件上传功能(推荐)
Jan 13 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
PHP使用ajax的post方式下载excel文件简单示例
Aug 06 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 PHP
Laravel配合jwt使用的方法实例
Oct 25 PHP
Cookie跨域问题解决方案代码示例
Nov 24 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
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
php更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
PHP向socket服务器收发数据的方法
2015/01/24 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
layui表格数据重载
2019/07/27 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
[06:45]DOTA2-DPC中国联赛 正赛 Magma vs LBZS 选手采访
2021/03/11 DOTA
关于Python如何避免循环导入问题详解
2017/09/14 Python
Python将8位的图片转为24位的图片实现方法
2018/10/24 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
Python连接Impala实现步骤解析
2020/08/04 Python
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
Ajax的优点和缺点
2014/11/21 面试题
小学教师学期末自我评价
2013/09/25 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
党的群众路线教育实践活动学习笔记范文
2014/11/06 职场文书
大学四年个人总结
2015/03/03 职场文书
2015年保险公司工作总结
2015/04/24 职场文书
管辖权异议上诉状
2015/05/23 职场文书
标枪加油稿
2015/07/22 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
2021/07/07 Servers
MongoDB连接数据库并创建数据等使用方法
2021/11/27 MongoDB
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers