隨筆-17  評論-64  文章-79  trackbacks-1
                  隨著adobe的FLEX和ROMTING的開源化又引起一場的RIA風波,我作為傳統的WEB開發人員被其深深的吸引,作為web開發人員很關注flash如何和后臺連接,在網上苦苦尋找終于發現了,在AS3下如何和后臺通信,其實FLASH ROMTING 和JAVA DWR設計很相似都是通過中間來轉化后臺和前臺對象,今天我就以一個金典的HELLOWORLD程序來展現這個框架。
                  首先到http://www.amfphp.org下載AMFPHP1.9,這是目前的最新版本支持AMF3,不像以前的版本1.9版本的部署非常簡單解壓縮后直接拷貝到apache配置的web下面我這里是D:\develop\WebDev\web\amfphp,然后可以測試一下安裝是否成功在地址欄中輸入http://localhost:8080/amfphp/gateway.php如果看到第一行amfphp and this gateway are installed correctly. You may now connect to this gateway from Flash。說明安裝成功可以進行下一步了。
                  然后寫后臺PHP代碼:Hello.php文件
                      <?php 
                                  class Hello{
                                          function sayHello(){       
                                                 return "Hello World";
                                           }
                                  }
                      ?>
                  后臺代碼很簡單,用過1.0版本的人可能發現這里沒有方法表了(我覺得這個改進使得業務方法和框架解耦了是個非常好的改進),為了簡單這里不講私有gateway.php配置直接調用公有的gateway.php,將Hello.php移動到amfphp\services下面,這樣服務器端就完成了。
                  下面是客戶端的編寫:
                    無意中在網上發現了一個很好封裝flash.net.Responder, flash.net.NetConnection 這兩個類的代碼這里公布給大家一起學習一下

          /*
          Remoting類
          負責FLASH與數據庫交互
          */

          package 
          {
              import flash.net.Responder;
              import flash.net.NetConnection;

              public class Remoting extends NetConnection 
          {
                  
          /*
                  構造
                  @param gatewayURL remoting網關地址
                  @param amfType 使用AMF3或AMF0
                  
          */

                  public 
          function Remoting(gatewayURL:String,amfType:uint) {
                      super();
                      
          this.objectEncoding=amfType;
                      
          this.connect(gatewayURL);
                  }

                  
          //##########################################################################
                  //
                  //方法
                  //
                  //##########################################################################
                  /*
                   * 遠程返回函數
                   * @param remoteMethod:遠程類.方法名param遠程方法所需要的參數onResultFun:返回數據所調用的方法句柄.onFaultFun同理.
                   * 
                  
          */

                  public 
          function respond(remoteMethod:String,onResultFun:*,onFaultFun:*,... param):void {
                      
          var parameters:Array=param;
                      
          if (param.length > 0{
                          parameters.unshift(remoteMethod,
          new Responder(onResultFun,onFaultFun));
                          
          this.call.apply(this,parameters);
                      }
           else {
                          
          this.call(remoteMethod,new Responder(onResultFun,onFaultFun));
                      }

                  }

              }

          }
                  

          然后在任何地方可以調用它:

          var remote:Remoting;
          remote
          =new Remoting("http://localhost/remotinggame/gateway.aspx",0);
          remote.respond(remoting方法名,onRuslt,onFault,參數1,參數2....);

          function onRuslt(re:*):void{
                 trace(
          " onRuslt:"+re);
          }

                  
          function onFault(fe:*):void{
                trace(
          " onFault:"+fe.code);            
          }

          下面用上面封裝的類來實現HELLOWORLD
          package {
              import flash.display.Sprite;
              
              
              public class Hello extends Sprite
          {
                  
                  private 
          var remoting:Remoting;
                  
                  public 
          function Hello (){
                          init();
                      }

                  
                  private 
          function init():void{
                          remoting
          =new Remoting("http://localhost:8080/amfphp/gateway.php",3
          );
                          remoting.respond(
          "Hello.sayHello",onGetData_Ruslt,onGetData_Fault);
                    }

                  
                  private 
          function onGetData_Ruslt(re:*):void{
                          trace(re
          );
                     }

                  private 
          function onGetData_Fault(fe:*):void{
                      
          for(var what in fe){
                          trace(what
          +"  fe:"+fe[what]);
                      }

                  }

              }

          }

          posted on 2007-12-13 21:52 飛鳥 閱讀(601) 評論(0)  編輯  收藏 所屬分類: RIA
          主站蜘蛛池模板: 龙泉市| 寻乌县| 内江市| 油尖旺区| 齐齐哈尔市| 仁化县| 浙江省| 同德县| 神木县| 葫芦岛市| 荆门市| 大方县| 灌南县| 会昌县| 荥经县| 鹿泉市| 沈丘县| 县级市| 治多县| 汉源县| 青海省| 尼木县| 若羌县| 延庆县| 聂拉木县| 革吉县| 合山市| 呼玛县| 宽甸| 鄄城县| 怀仁县| 韶关市| 肃北| 绥德县| 溧水县| 屏山县| 策勒县| 北宁市| 兴安县| 安塞县| 阜平县|