`

flex amf的使用

阅读更多
AMF是Adobe独家开发出来的通信协议,它采用二进制压缩,序列化、反序列化、传输数据,从而为Flash 播放器与Flash Remoting网关通信提供了一种轻量级的、高效能的通信方式。如下图所示:


AMF(Action Message Format)是一种 binary format的资料型态,透过 AMF overHTTP的方式将flash端资料编码后传回server,server端的remotingadaptor接收到资料后则会译码回正确的native对象,交给正确的程序处理。

AMF最大的特色在于可直接将Flash内置对象,例如Object, Array, Date, XML,传回服务器端,并且在服务器端自动进行解析成适当的对象,这就减轻了开发人员繁复工作,同时也更省了开发时间。由于AMF采用二进制编码,这种方式可以高度压缩数据,因此非常适合用来传递大量的资料。数据量越大,Flash Remoting的传输效能就越高,远远超过Web Service。至于XML, LoadVars和loadVariables() ,它们使用纯文本的传输方式,效能就更不能与Flash Remoting相提并论了。

注意:Flash Remoting需要浏览器支持Binary POST,Flash 播放器在Netscape 6.x.环境下运行Flash Remoting会不起作用(Flash Remoting调用没有效果也不返回错误), Netscape 7已经纠正了这个bug 。对于早期Safari和Chimera版的苹果机也有这个问题。


下面是一个flex amf socket连接例子

java服务器代码:
/*  
 * To change this template, choose Tools | Templates  
 * and open the template in the editor.  
 */  
package sockeserver;   
  
import java.io.*;   
import java.net.ServerSocket;   
import java.net.Socket;   
  
  
import flex.messaging.io.*;   
import flex.messaging.io.amf.*;   
import java.util.HashMap;   
import java.util.Map;   
import java.util.zip.DeflaterOutputStream;   
  
/**  
 *  
 * @author  mumuyu99  
 */  
public class socketServer implements Runnable {   
  
    public static void main(String[] args) {   
start();   
  
    }    //****************************************************************//   
    private static boolean isRunning = false;           //服务器运行标志   
    ServerSocket ss = null;                         //socket连接   
    int userIndexNumber;                            //用户索引号   
    int userCount;                                  //房间人数   
    //Iterator it=null;                             //迭代器   
    //*************************消息协议*********************************//   
    private byte type;                                          //消息类型   
    private byte mainCmd;                                       //消息主命令   
    private byte subCmd;                                        //消息子命令   
    private byte[] data;                                        //消息数据   
    private SerializationContext context = new SerializationContext();   
  
    public static void start() {   
        socketServer server = new socketServer();   
  
        // server.heardHeart();   
        new Thread(server).start();   
        System.out.println("服务器打开");   
    }   
  
    public void run() {   
        try {   
            isRunning = true;   
            try {   
                ss = new ServerSocket(9999);   
            } catch (IOException ex) {   
                System.out.println(ex.toString());   
            }   
            Socket socket;   
            while (isRunning) {   
                socket = ss.accept();   
                handleCmd(socket);   
            }   
  
        } catch (IOException ex) {   
            System.out.println(ex.toString());   
        }   
  
  
    }   
  
    private void handleCmd(Socket inComing) {   
        try {   
            DataInputStream dis = new DataInputStream(inComing.getInputStream());   
            DataOutputStream dos = new DataOutputStream(inComing.getOutputStream());   
  
  
  
  
            System.out.println("准备好接收数据!");   
  
            byte[] lang = new byte[dis.available()];   
            dis.read(lang);   
            System.out.println(new String(lang, "utf-8"));   
  
            Amf3Output out = new Amf3Output(context);   
            DeflaterOutputStream stream = new DeflaterOutputStream(dos);   
            out.setOutputStream(stream);   
  
            Map map = new HashMap();   
            String[] arr = "1,2,3,4,5".split(",");   
  
            map.put("datas", arr);   
            map.put("userName", "mumuyu99");   
            map.put("fullName", "最新消息");   
             
  
            out.writeObject(map);   
            stream.finish();   
  
            dos.writeUTF("你好啊");   
  
            dos.flush();   
  
  
  
        } catch (IOException ex) {   
            System.out.println(ex.toString());   
        }   
  
  
    }   
}  



Flex端的代码如下:
<?xml version="1.0" encoding="utf-8"?>   
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768"  
       
       
    >   
       
    <fx:Script>   
    <!--[CDATA[   
           
        import flash.net.Socket;   
        import mx.controls.Alert;   
           
           
           
        private static var socket:Socket;   
           
        private var byteaa:ByteArray;   
        private function connectSocket():void{   
               
               
            socket=new Socket("localhost",9999)   
            //socket.objectEncoding=ObjectEncoding.AMF3;
                   
            var byteArray:ByteArray=new ByteArray();   
               
            var s:String="hello word!"  
                   
                   
                   
            byteArray.writeUTFBytes(s);   
            socket.writeBytes(byteArray,0,byteArray.length);   
            socket.writeMultiByte(s,"UTF-8");   
            socket.flush();   
            byteaa=new ByteArray();   
            socket.addEventListener(ProgressEvent.SOCKET_DATA,loaderHandler);   
            socket.addEventListener(IOErrorEvent.IO_ERROR,errorIO);   
            socket.addEventListener(Event.CONNECT,connectStart);   
               
               
        }   
           
        private function connectStart(event:Event):void{   
            Alert.show("连接成功!");   
        }   
        private function errorIO(event:IOErrorEvent):void{   
            Alert.show("连接不到数据源!");   
        }   
           
        private function loaderHandler(event:ProgressEvent):void {     
  
            //  var intervalId:uint = setTimeout(laoderInit,100);   
            laoderInit();   
        }     
           
           
        private function laoderInit():void{   
               
               
            var start:Number=getTimer();     
               
               
               
            while(socket.bytesAvailable>0){   
                   
                socket.readBytes(byteaa);      
                   
            }   
               
            byteaa.uncompress();   
               
               
               
               
            var obj:Object = byteaa.readObject();   
            Alert.show(obj.fullName);   
               
            var end:Number=getTimer();      
            Alert.show("耗时:" + (end - start) + "毫秒");    
               
        }   
           
           
        protected function button1_clickHandler(event:MouseEvent):void  
        {   
            connectSocket();   
               
        }   
    ]]-->   
    </fx:Script>   
       
    <s:Button x="190" y="370" label="连接" enabled="true"  click="button1_clickHandler(event)"/>   
       
</s:Application> 
  • 大小: 6.7 KB
分享到:
评论

相关推荐

    AMF.rar_FluorineFx_FluorineFx amf_amf__flex_flex amf

    4. **客户端集成**: 在Flex项目中,使用`RemoteObject`或`WebService`组件来与服务端进行AMF通信。 5. **数据交换**: 设计并实现服务端和客户端的数据模型,确保AMF能够正确地序列化和反序列化对象。 6. **测试和...

    flex与amf

    而"easyamf"可能是一个简化AMF使用的库或工具,帮助开发者更容易地集成AMF到他们的项目中。 7. 实战经验:在实际项目中,开发者可能需要处理如数据推送、实时更新等问题。Flex与AMF的组合可以实现WebSocket或者Long...

    AMF抓取flex页面数据

    本教程将详细介绍如何抓取使用AMF协议的Flex页面数据,并涉及模拟登录和页面抓取的相关知识。 1. **AMF简介** - AMF是一种高效的数据序列化格式,用于在Flex客户端和服务器之间传输数据。它比XML或JSON更快,因为...

    Flex + Zend AMF + MYSQL + WAMP 新手指南

    标题中的“Flex + Zend AMF + MYSQL + WAMP 新手指南”揭示了本文将要讨论的是一个关于构建基于Web的应用程序的技术栈,其中包含了前端、后端和数据库的相关技术。让我们逐一深入理解这些技术。 1. **Flex**: ...

    AMF.NET 文件极小的开源AMF解析库

    使用AMF.NET进行开发时,开发者可以创建服务端的方法,这些方法会被Flash或Flex客户端调用。AMF.NET会自动处理AMF数据的包装和解包,简化了服务器端的实现。同时,由于AMF的二进制特性,相比基于文本的协议(如HTTP...

    flex-messaging-core-amf1.7

    flex-messaging-core-amf1.7

    java flex jar包

    Java是一种广泛使用的后端编程语言,而Flex则是一种基于ActionScript的前端框架,主要用于构建交互性强、图形用户界面丰富的Web应用。当我们谈论"Java Flex jar包"时,这通常是指使用Java来与Flex应用进行交互,通过...

    struts flex 结合使用

    Struts Flex结合使用是一种在Java Web开发中创建富互联网应用程序(RIA)的解决方案。Struts是Apache软件基金会下的一个开源MVC框架,主要用于构建企业级的Web应用,而Flex是Adobe开发的一种基于ActionScript的RIA...

    AMF1.0(AMP).zip

    AMF,全称为Action Message Format,是一种数据序列化协议,主要在Adobe的Flex、Flash Player以及服务器端技术如Adobe LiveCycle Data Services等中使用。它允许应用程序之间高效地传输复杂的数据结构,包括对象、...

    thinkphp_amf

    "amf" 标签表明了这个项目涉及到AMF协议的使用,而 "flex" 则指的是Adobe Flex,这是一个用于构建RIA的开发工具和框架,其客户端应用程序通常使用AMF与服务器通信。 【压缩包子文件的文件名称列表】: 1. **index....

    flex flex和 java交互

    Flex应用程序通常使用ActionScript编程语言,并基于Flash Player或Adobe AIR运行时环境。Java则是一种广泛使用的面向对象的编程语言,尤其在企业级应用开发中占据重要地位。 标题"flex 和 java交互"指出了一个关键...

    amf3协议解析的例子

    AMF3(Action Message Format version 3)协议是Adobe公司为Flash Player和Flex应用程序之间通信设计的一种二进制数据交换格式。它旨在提高数据传输效率,同时保持足够的灵活性以适应不同类型的复杂数据结构。AMF3...

    开源amf协议解析封装

    开源AMF协议解析封装主要涉及的是Action Message Format (AMF)技术在C#语言环境...通过理解和使用该项目,开发者可以深入理解AMF协议,并掌握如何在C#中实现这种协议,这对于构建富互联网应用程序(RIA)具有重要意义。

    flex可以使用的crud例子

    在Flex中,CRUD操作通常与后端数据服务交互,如使用AMF(Action Message Format)或者Web服务(如SOAP或RESTful API)来传递数据。以下是对这个示例项目的详细解析: 1. **创建(Create)**:在Flex中,创建新记录...

    flex与jsp结合使用

    Flex 应用可以发送 AMF(Action Message Format)或 SOAP 请求到 JSP,JSP 处理请求并返回 JSON 或 XML 数据。Flex 接收到数据后,根据数据更新界面,实现了前后端的数据交换。 7. **优点**:Flex 与 JSP 结合提供...

    amf-php flex插件

    这是一个flex的lib库,方便开发者迅速开展amf连接操作。

    AMF3 C++ 源码库码库

    AMF3(Action Message Format version 3)是Adobe公司开发的一种二进制数据序列化格式,主要用于Flash Player和Flex应用程序与服务器之间的数据交换。在C++编程环境中,AMF3库可以帮助开发者高效地处理这种数据格式...

    AMF-1.4.33.zip

    1. **二进制格式**:AMF使用二进制编码,使得数据传输更紧凑,降低了网络带宽需求,提高了传输效率。 2. **类型感知**:AMF能识别并编码多种数据类型,如数字、字符串、日期、对象、数组等,无需额外的元数据。 3. *...

    AMF数据分析器_V22

    功能: 支持AS3的ByteArray序列化对象的AMF格式编码、解码( readObject、writeObject )。 支持AS3的ByteArray的compress、uncompress压缩算法:...为方便想了解AMF格式及封包的坛友分析解码AMF数据资料使用。

    flex 官方文档 中文教程

    Flex支持与各种数据源的通信,如AMF、SOAP、REST等,可以方便地调用Web服务,获取和更新远程数据。 9. **动画和效果** 使用Flex,开发者可以创建复杂的动画效果,增强用户体验。Timeline和Transitions类库提供了...

Global site tag (gtag.js) - Google Analytics