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 相关文章推荐
BBS(php &amp; mysql)完整版(八)
Oct 09 PHP
不用数据库的多用户文件自由上传投票系统(2)
Oct 09 PHP
php 删除数组元素
Jan 16 PHP
php自定义函数call_user_func和call_user_func_array详解
Jul 14 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
Apr 23 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
joomla实现注册用户添加新字段的方法
May 05 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
Yii2中SqlDataProvider用法示例
Sep 22 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 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
星际争霸 Starcraft 编年史
2020/03/14 星际争霸
法压式咖啡之制作法
2021/03/03 冲泡冲煮
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
2013/11/19 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
javascript 面向对象封装与继承
2014/11/27 Javascript
jquery ajax 如何向jsp提交表单数据
2015/08/23 Javascript
详解javascript实现自定义事件
2016/01/19 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
AngularJs实现分页功能不带省略号的代码
2016/05/30 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
Node.js数据库操作之连接MySQL数据库(一)
2017/03/04 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
a标签调用js的方法总结
2019/09/05 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
Python字典及字典基本操作方法详解
2018/01/30 Python
Python中的groupby分组功能的实例代码
2018/07/11 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
简单了解django索引的相关知识
2019/07/17 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
详解HTML5 canvas绘图基本使用方法
2018/01/29 HTML / CSS
婚假请假条怎么写
2014/04/10 职场文书
企业公益活动策划方案
2014/08/24 职场文书
2014党委书记四风对照检查材料思想汇报
2014/09/21 职场文书
运动会广播稿200字(10篇)
2014/10/12 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书
离职信范本
2015/06/23 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
浅谈Redis中的RDB快照
2021/06/29 Redis