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日历程序
Dec 06 PHP
PHP音乐采集(部分代码)
Feb 14 PHP
通用PHP动态生成静态HTML网页的代码
Mar 04 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 PHP
php防注入及开发安全详细解析
Aug 09 PHP
一个基于phpQuery的php通用采集类分享
Apr 09 PHP
WIN8.1下搭建PHP5.6环境
Apr 29 PHP
phpStudy访问速度慢和启动失败的解决办法
Nov 19 PHP
PHP实现的获取文件mimes类型工具类示例
Apr 08 PHP
PHP实现读取文件夹及批量重命名文件操作示例
Apr 15 PHP
Swoole4.4协程抢占式调度器详解
May 23 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数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
2011/10/29 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
2017/09/29 PHP
js实现iframe动态调整高度的代码
2008/01/06 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
jQuery获取注册信息并提示实现代码
2013/04/21 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
JavaScript自定义分页样式
2017/01/17 Javascript
用nodeJS搭建本地文件服务器的几种方法小结
2017/03/16 NodeJs
React Native使用百度Echarts显示图表的示例代码
2017/11/07 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
ES10 特性的完整指南小结
2019/03/04 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
2020/07/31 Javascript
浅谈numpy数组中冒号和负号的含义
2018/04/18 Python
浅析Python函数式编程
2018/10/06 Python
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
怎么解决pycharm license Acti的方法
2020/10/28 Python
Pycharm-community-2020.2.3 社区版安装教程图文详解
2020/12/08 Python
CSS3 实现的火焰动画
2020/12/07 HTML / CSS
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
《美丽的田园》教学反思
2014/03/01 职场文书
产品设计开发计划书
2014/05/07 职场文书
保护环境建议书400字
2014/05/13 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
正风肃纪剖析材料
2014/09/30 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
Oracle 触发器trigger使用案例
2022/02/24 Oracle
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS