flex temoting

Flex 的Remoting采用AMF通信协议(Flex3已经升级为了AMF2了),这种协议最大的一个优势就是由于采用了二进制的传输方式,其传输效率非常 高,可以让我们在复杂的网络环境获得良好的性能。根据国外一个很牛的老外写的在线测试工具,AMF协议的效率要远远高于webservice以及采用 JSON格式承载数据的AJAX方式。  Flex的另一种方式通信就是PollingChannel,它的特点就是它可以多批次的去服务端取数据,而不是长时间保持连接直到所有数据取回之后才关闭我们宝贵的HTTP连接。

       首先我们在WEB-INF下面的Class目录中添加一个JAVA类,如下:

     public class HelloWorld {
         private String userSaid;
        public String repeat( String said) {
            this .userSaid = "Reply from server: " + said;
            return this .userSaid ;
        }
        public String sayHello( ) {
        Date now = new Date ( ) ;
        return "Hello World " + now;
     }
  }

        然后我们打开Remoting-Config.xml文件,在service中添加一个目的地指向我们服务端的JAVA类(destination节点),具体如下:

        <service id ="remoting-service" class ="flex.messaging.services.RemotingService" >
        <adapters>
        <adapter-definition id ="java-object" class ="flex.messaging.services.remoting.adapters.JavaAdapter" default ="true" > </adapter-definition>
       </adapters>
     
<destination id ="Hello" >
       <properties>
         <source> HelloWorld</source>
       </properties>
      </destination>
    <default-channels>
        <channel ref ="my-amf" >
    </channel>
</default-channels>
</service>

       添 加完成之后,我们打开一个flex页面,在上面添加一个RemotObject标签,当然你也可以在可视化状态下拖一个上去,然后添加我们刚才在 HelloWorl类中定义的两个方法,并在AS代码块中定义两个回调方法用来异步接收返回的结果或发生的异常,具体代码如下:

       <mx:application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" backgroundcolor ="#FFFFFF" viewsourceurl="srcview/index.html" >
    <mx:remoteobject id="myservice" fault="faultHandler(event)" showbusycursor="true" destination="Hello" >
        <mx:method name ="sayHello" result="resultHandler(event)" >
        <mx:method name ="repeat" result="resultHandler(event)" >
    </mx:method>
 
    <mx:script>
        <!–[ CDATA[
            import mx.managers .CursorManager ;
            import mx.rpc .events .ResultEvent ;
            import mx.rpc .events .FaultEvent ;
            private function faultHandler( fault:FaultEvent) :void
            {
                CursorManager.removeBusyCursor ( ) ;
                result_text.text = "code:n" + fault.fault .faultCode + "nnMessage:n" + fault.fault .faultString + "nnDetail:n" + fault.fault .faultDetail ;
            }
 
            private function resultHandler( evt:ResultEvent) :void
            {
                result_text.text = evt.message .body .toString ( ) ; // same as: evt.result.toString();
            }
        ] ] –>
    </mx:script>
 
    <mx:button x="250" y="157" label="sayHello" width ="79" click="myservice.getOperation(’sayHello’).send();" >
    <mx:button x="250" y="187" label="Repeat" click="myservice.getOperation(’repeat’).send(myText.text); " >
    <mx:textarea x="10" y="36" width ="319" height ="113" id="result_text" >
    <mx:label x="10" y="10" text ="Result:" >
    <mx:textinput x="82" y="187" id="myText" text ="Sent to Server" >
</mx:textinput>
</mx:label>

</mx:textarea> </mx:button></mx:button></mx:method></mx:remoteobject></mx:application>

     做好之后,激动人心的时刻来临了,  F11运行,现在你就可以尽情的与服务端发消息了。注意,JAVA类的序列化与反序列化对我们来说都是透明的,这一切都是FLEX与Blazeds为我们做的。这就是它们带给我们的好处,让我们将重点放在业务逻辑与用户更好的操作性与体验上。

你可能感兴趣的:(Ajax,json,webservice,Flex,网络协议)