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 相关文章推荐
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 PHP
IIS7.X配置PHP运行环境小结
Jun 09 PHP
php多文件上传功能实现原理及代码
Apr 18 PHP
浅析php header 跳转
Jun 17 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
php命令行用法入门实例教程
Oct 27 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
Nov 25 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
May 31 PHP
在Laravel中使用DataTables插件的方法
May 29 PHP
ThinkPHP5.1框架数据库链接和增删改查操作示例
Aug 03 PHP
PHP的cookie与session原理及用法详解
Sep 27 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
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
2014/09/06 PHP
PHP基本语法总结
2014/09/06 PHP
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
Grid得到选择行数据的方法总结
2011/01/17 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
JavaScript中Number对象的toFixed() 方法详解
2016/09/02 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
sea.js常用的api简易文档
2016/11/15 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
微信小程序-拍照或选择图片并上传文件
2017/01/06 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
ElementUI之Message功能拓展详解
2019/10/18 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
python求众数问题实例
2014/09/26 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
Python中字符串与编码示例代码
2019/05/20 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
Python可以实现栈的结构吗
2020/05/27 Python
python 代码运行时间获取方式详解
2020/09/18 Python
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
什么造成了Java里面的异常
2016/04/24 面试题
linux系统都有哪些运行级别
2012/04/15 面试题
农行实习自我鉴定
2013/09/22 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
2014年医院工作总结
2014/11/20 职场文书
大学生村官入党自传
2015/06/26 职场文书
公司仓库管理制度
2015/08/04 职场文书
mysql部分操作
2021/04/05 MySQL