AMFPHP快速入门
生活随笔
收集整理的這篇文章主要介紹了
AMFPHP快速入门
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
AMFPHP是PHP的遠程調用(RPC, Remote Procedure Call)工具。它可以使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/";?
本文轉自Phinecos(洞庭散人)博客園博客,原文鏈接:http://www.cnblogs.com/phinecos/archive/2010/05/10/1731595.html,如需轉載請自行聯系原作者
什么是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/";?
本文轉自Phinecos(洞庭散人)博客園博客,原文鏈接:http://www.cnblogs.com/phinecos/archive/2010/05/10/1731595.html,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的AMFPHP快速入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 025 资源的隔离与配置
- 下一篇: 解锁redis锁的正确姿势