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 相关文章推荐
MySQL中create table语句的基本语法是
Jan 15 PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
PHP 循环列出目录内容的函数代码
May 26 PHP
php在window iis的莫名问题的测试方法
May 14 PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
在PHP程序中使用Rust扩展的方法
Jul 03 PHP
Symfony2安装第三方Bundles实例详解
Feb 04 PHP
CodeIgniter框架验证码类库文件与用法示例
Mar 18 PHP
php 判断页面或图片是否经过gzip压缩的方法
Apr 05 PHP
如何直接访问php实例对象中的private属性详解
Oct 12 PHP
PHP二维关联数组的遍历方式(实例讲解)
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
PHP常用代码
2006/11/23 PHP
PHP简单生成缩略图相册的方法
2015/07/29 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
2013/01/09 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
使用angular写一个hello world
2015/01/23 Javascript
JavaScript闭包详解
2015/02/02 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
深入浅出分析javaScript中this用法
2015/05/09 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
2017/01/14 Javascript
javascript 秒表计时器实现代码
2017/03/09 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
微信小程序之蓝牙的链接
2017/09/26 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
python解析xml文件操作实例
2014/10/05 Python
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
Python装饰器简单用法实例小结
2018/12/03 Python
基于Python3.7.1无法导入Numpy的解决方式
2020/03/09 Python
python实现简易版学生成绩管理系统
2020/06/22 Python
2014年三八妇女节活动方案
2014/02/28 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
维稳承诺书
2015/01/20 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
离职信范本
2015/06/23 职场文书
2016年度先进班组事迹材料
2016/03/01 职场文书
移除Selenium中window.navigator.webdriver值
2022/06/10 Python