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作的文本留言本的例子(二)
Oct 09 PHP
用php实现批量查询清除一句话后门的代码
Jan 20 PHP
全世界最小的php网页木马一枚 附PHP木马的防范方法
Oct 09 PHP
PHPWind 发帖回帖Api PHP版打包下载
Feb 08 PHP
PHP JSON 数据解析代码
May 26 PHP
晋城吧对DiscuzX进行的前端优化要点
Sep 05 PHP
深入理解PHP之require/include顺序 推荐
Jan 02 PHP
PHP无限分类(树形类)的深入分析
Jun 02 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
PHP命名空间和自动加载类
Apr 03 PHP
php仿微信红包分配算法的实现方法
May 13 PHP
Yii实现文章列表置顶功能示例
Oct 18 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
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
PHP下载文件的函数实例代码
2016/05/18 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
jQuery代码优化 遍历篇
2011/11/01 Javascript
node.js中的fs.renameSync方法使用说明
2014/12/16 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
2016/10/20 Javascript
基于游标的分页接口实现代码示例
2018/11/12 Javascript
基于ssm框架实现layui分页效果
2019/07/27 Javascript
JS字符串补全方法padStart()和padEnd()
2020/05/27 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
python爬取w3shcool的JQuery课程并且保存到本地
2017/04/06 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
pandas string转dataframe的方法
2018/04/11 Python
如何用python整理附件
2018/05/13 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
使用Python编写Prometheus监控的方法
2018/10/15 Python
Django组件content-type使用方法详解
2019/07/19 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
会计专业应届生自荐信
2014/02/07 职场文书
家长会主持词开场白
2014/03/18 职场文书
社区巾帼文明岗事迹材料
2014/06/03 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
财政局党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
办公室个人总结
2015/02/28 职场文书
培训班开班主持词
2015/07/02 职场文书
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫