`
wuxiao_v
  • 浏览: 45505 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex 3 如何生成swc文件

阅读更多
前言:
有很多类似股票、外汇、期货等实时行情这种应用,客户端需要显示行情牌价等信息。
目前的作法是:客户端定时向服务器请求,无论数据是否有更新,都把数据发到客户端。
我们这里讲的一种技术不同以上这个做法,我们是采用服务器向客户端推的这种方式,该方式的好处不言自明。blazeds中有一个名为:StreamingAMFChannel 的通道,我们就是采用它来实现向客户端推这个功能。
环境准备:
我采用eclipse(wtp)+ flex3 build 的软件环境。软件安装我这里就不说明了。blazeds我采用的是blazeds_bin_3-0-0-544,其实你只要下载blazeds.war文件即可。
操作步骤:
1 、切换至flex development视图模式下,点右键新建一个Flex Project。
如我的项目名为:flex-blazeds
 
点击Next按纽,来到下一页面,


在这步中,直接点:Finish即可。
接下来,右键点击flex-blazeds项目,打开“属性”对话框,如下图:把红色圈起来的地方,改成红字部分。

点“OK”。
切换至“java开发视图”,新建名为:cn.bestwiz.design.tc 的包,在该包中,新建名为Tick.java的类,内容如下:
//Tick.java
package cn.bestwiz.design.tc;

import java.math.BigDecimal;
import java.util.Date;

public class Tick {
    private BigDecimal askPrice;

    private BigDecimal bidPrice;

    private BigDecimal midPrice;

    private Date tickTime;

    private String seqno;

    public String getSeqno() {
        return seqno;
    }

    public void setSeqno(String seqno) {
        this.seqno = seqno;
    }

    public BigDecimal getAskPrice() {
        return askPrice;
    }

    public void setAskPrice(BigDecimal askPrice) {
        this.askPrice = askPrice;
    }

    public BigDecimal getBidPrice() {
        return bidPrice;
    }

    public void setBidPrice(BigDecimal bidPrice) {
        this.bidPrice = bidPrice;
    }

    public BigDecimal getMidPrice() {
        return midPrice;
    }

    public void setMidPrice(BigDecimal midPrice) {
        this.midPrice = midPrice;
    }

    public Date getTickTime() {
        return tickTime;
    }

    public void setTickTime(Date tickTime) {
        this.tickTime = tickTime;
    }


}



接下来,再新建一名为:cn.bestwiz.design.tc.servlet 的包,再切换至“j2ee视图”,在该视图模式下,新建一名为“TickCacheServlet.java”的Servlet.


点击“Finish”完成即可。
文件内容如下:
//TickCacheServlet 
package cn.bestwiz.design.tc.servlet;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.bestwiz.design.tc.Tick;
import flex.messaging.MessageBroker;
import flex.messaging.messages.AsyncMessage;
import flex.messaging.util.UUIDUtils;

public class TickCacheServlet extends HttpServlet {

    private static FeedThread thread;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        String cmd = req.getParameter("cmd");
        if (cmd.equals("start")) {
            start();
        }
        if (cmd.equals("stop")) {
            stop();
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doGet(req, resp);
    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        super.destroy();
    }

    @Override
    public void init() throws ServletException {
        // TODO Auto-generated method stub
        super.init();
    }

    public void start() {
        if (thread == null) {
            thread = new FeedThread();
            thread.start();
        }
        System.out.println("start!!");
    }

    public void stop() {
        thread.running = false;
        thread = null;
    }

    public static class FeedThread extends Thread {

        public boolean running = true;

        public void run() {
            MessageBroker msgBroker = MessageBroker.getMessageBroker(null);
            String clientID = UUIDUtils.createUUID();
            int i = 0;
            while (running) {
                Tick tick = new Tick();
                tick.setAskPrice(new BigDecimal("100"));
                tick.setBidPrice(new BigDecimal("100"));
                tick.setMidPrice(new BigDecimal("100"));
                tick.setTickTime(new Date());

                tick.setSeqno(String.valueOf(i));
                System.out.println(i);

                AsyncMessage msg = new AsyncMessage();
                msg.setDestination("tick-data-feed");
                msg.setHeader("DSSubtopic", "tick");
                msg.setClientId(clientID);
                msg.setMessageId(UUIDUtils.createUUID());
                msg.setTimestamp(System.currentTimeMillis());
                msg.setBody(tick);
                msgBroker.routeMessageToService(msg, null);
                i++;
                try {
                    Thread.sleep(20);
                } catch (InterruptedException e) {
                }

            }
        }
    }

}

下一步加入flex配置文件。
flex的配置文件默认有四个,文件目录在WebContent\WEB-INF\flex目录下。
messaging-config.xml
proxy-config.xml
remoting-config.xml
services-config.xml
其实,这中间用的是一个,就是services-config.xml,只是在services-config.xml中,包含其它三个。

在services-config.xml文件中,加入如下:
<channel-definition id="my-streaming-amf" class="mx.messaging.channels.StreamingAMFChannel">
            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/streamingamf" class="flex.messaging.endpoints.StreamingAMFEndpoint"/>
            <properties>
                <idle-timeout-minutes>0</idle-timeout-minutes>
                <max-streaming-clients>10</max-streaming-clients>
                <server-to-client-heartbeat-millis>5000</server-to-client-heartbeat-millis>
                <user-agent-settings>
                    <user-agent match-on="MSIE" kickstart-bytes="2048" max-streaming-connections-per-session="1"/>
                    <user-agent match-on="Firefox" kickstart-bytes="2048" max-streaming-connections-per-session="1"/>
                </user-agent-settings>
            </properties>
        </channel-definition> 

messaging-config.xml文件中,加入如下:
<destination id="tick-data-feed">
        <properties>
            <server>
                <allow-subtopics>true</allow-subtopics>
                <subtopic-separator>.</subtopic-separator>
            </server>
        </properties>
        <channels>
            <channel ref="my-polling-amf" />
            <channel ref="my-streaming-amf" />
        </channels>
    </destination>

再切换至flex 开发视图,新建一名为:Tick.as的ActionScript文件。


点击“Finish”按纽。
Tick.as文件内容如下:
//Tick.as
package
    {
    [RemoteClass(alias="cn.bestwiz.design.tc.Tick")]
    [Bindable]
    public class Tick
    {        
        public var askPrice:Number;
        public var bidPrice:Number;
        public var midPrice:Number;
        public var tickTime:Date;;
        public var seqno:String;
    }
    
}

再在main.mxml文件中,加入如下代码:
引用
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" viewSourceURL="srcview/index.html" height="378" width="426">

    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            import mx.rpc.events.ResultEvent;
            import mx.messaging.Consumer;
            import mx.messaging.Channel;
            import mx.messaging.ChannelSet;
            import mx.messaging.events.MessageEvent;

            [Bindable]
            public var tick:Tick;
           
            public function submsg():void
            {
                Alert.show("click start");
                var consumer:Consumer = new Consumer();
                consumer.destination = "tick-data-feed";
                consumer.subtopic = "tick";
                consumer.channelSet = new ChannelSet(["my-streaming-amf"]);
                consumer.addEventListener(MessageEvent.MESSAGE, messageHandler);
                consumer.subscribe();
                Alert.show("click end");
            }
           
            private function messageHandler(event:MessageEvent):void
            {
                var tick:Tick = event.message.body as Tick;
                txtTick.text = tick.seqno;
            }
        ]]>
    </mx:Script>
    <mx:Panel x="32" y="43" width="362" height="302" layout="absolute" title="Watch Tick">
        <mx:Label x="72" y="43" text="Label" id="txtTick"/>
        <mx:Button x="132" y="41" label="Button" click="submsg(); "/>
    </mx:Panel>
</mx:Application>

OK,至此,我们的代码全部结束了。

下面我们开始测试。

打开一个浏览器,在浏览器的地址栏中,输入:
http://localhost:8080/flex-blazeds/TickCacheServlet?cmd=start

再返回eclipse,在main.mxml文件上,单击右键,用Flex Application运行它。
之后,在打开的浏览器flash上,点击“Button”按纽,可以看到按纽之前的一个Label的Text一直有数字在增大。
  • 大小: 60.2 KB
  • 大小: 58.5 KB
  • 大小: 35.4 KB
  • 大小: 30 KB
分享到:
评论

相关推荐

    使用ant编译生成flex的swc文件

    在传统的Flex开发过程中,生成SWC文件通常需要手动操作Adobe Flex Compiler(compc),这个过程对于大型项目来说确实复杂且耗时。为了解决这个问题,我们可以利用Ant的强大功能来自动化这一过程。 在提供的文件列表...

    FlexPaper的flex的swc文件

    本主题将详细探讨FlexPaper与Flex的结合使用,以及如何将提供的两个SWC文件整合到Flex工程中以调用API。 首先,让我们了解一下什么是SWC文件。SWC是Adobe Flex编译器生成的一种库文件格式,它包含了ActionScript类...

    flexbuilder打包swc

    如果代码没有错误,FlexBuilder将生成一个SWC文件,里面包含了项目中所有的类和资源。 在给定的"SWCTest"压缩包中,可能包含了用于测试SWC打包的一个示例项目。解压后,你可以查看其中的源代码、配置文件,甚至运行...

    flash actionscript3游戏开发之 用FlashBuilder生成swc的方法_亲测成功.zip

    在Flash ActionScript3游戏开发中,使用FlashBuilder生成SWC文件是一个重要的步骤,尤其是在构建可重用组件或库时。SWC(Shockwave Flash Component)是Adobe提供的一个库格式,它允许开发者打包ActionScript代码、...

    flex解析json的swc包(entity-flex-v1-02)及例子

    在Flex项目中,开发者可以通过将这个SWC文件添加到类路径来引入其功能。在Flex Builder或Flash Builder中,这通常意味着将文件拖放到项目的库面板,或者在编译设置中指定库路径。 关于Flex解析JSON的详细过程,一般...

    Flash AS3与JAVASCRIPT通信,读取图片,生成SWC

    - **SWC文件**:SWC是Adobe Flash的库文件格式,用于封装AS3代码、资源和元数据,便于重用和分发。 - **构建过程**:在Flash Professional或Flex Builder等环境中,你可以选择导出库为SWC。将所有相关类和资源添加...

    FLEX调试工具Console.swc

    SWC文件是Adobe Flex编译器生成的一种二进制文件格式,它包含了ActionScript类、资源和元数据,可以被其他Flex项目引用。通过引入`Console.swc`,开发者可以方便地在应用程序中添加自定义的调试控制台,查看和分析...

    flash cs6中导入外部的swc文件,as3的使用的ArrayList,Set,Hashmap等工具包

    首先,SWC文件是Adobe Flex编译器生成的库文件格式,它包含ActionScript类、资源和其他元数据。开发者可以创建自己的SWC库,或者从第三方资源中获取,比如开源的AS3库,用于扩展AS3的功能。将SWC文件导入Flash CS6的...

    flex json解析包(corelib.swc)

    首先,我们要了解什么是SWC文件。SWC是Adobe Flex Compiler生成的库文件格式,它包含了ActionScript代码、资源、元数据等,可以被其他Flex项目作为依赖引用,以实现代码复用和模块化开发。 在Flex中,进行JSON操作...

    as3xls-1.0.1.swc

    1. 引入库文件:将`as3xls-1.0.1.swc`文件添加到Flex项目的类路径中。 2. 创建Excel对象:在代码中实例化Excel对象,并进行必要的配置。 3. 添加工作表:创建新的工作表,为每个工作表设置名称。 4. 填充数据:从...

    Flex添加Module .actionScriptProperties文件自动生成 在此文件中添加 <modules>

    编译会根据`.actionScriptProperties`和`rootConfig.properties`的设置来生成SWF或SWC模块文件。 6. **在主应用程序中加载模块**:在主应用程序中,我们需要使用`ModuleManager`类来加载和管理这些模块,以便在运行...

    使用Flex Ant Tasks编译工程文件

    这些任务可能包括编译Flex源码、生成SWC库、处理MXML文件等。例如,`compc`任务用于编译Flex组件,`mxmlc`任务用于编译Flex应用程序,而`:flex::flex-sdk`任务则用于指定Flex SDK的位置。 在`bin`目录下,通常会...

    Flex读Excel文件内容

    在Flex编程环境中,读取Excel文件内容是一项常见的需求,特别是在数据导入、数据分析或者报表生成等场景。本示例("Flex读Excel文件内容")旨在教你如何在Flex桌面应用程序和Web应用程序中实现这一功能。Flex是一款...

    flex 创建as3例子

    `html-template`目录是Flex生成SWF文件后在Web上运行时所需的HTML模板。它包含了嵌入SWF的HTML文件和相关资源,如CSS样式和JavaScript。这使得Flex应用程序可以在网页中无缝集成。 `src`目录是源代码存放的地方。在...

    fds.rar基本上都要用到FDS.SWC

    FDS.SWC文件是Flex Data Services(FDS)的组件库,它是Flex应用程序与数据服务进行交互的核心组件。FDS允许开发者创建能够实时处理大量数据的富互联网应用程序(RIA)。SWC文件是Adobe Flash的库文件格式,用于存储...

    Flex开发指南.pdf

    Flex项目是最常用的,允许开发者导入自定义的Flex类库SWC文件,这些文件可以包含图片、声音、组件或其他资源。SWC库有两种类型:普通类型和RSL(Runtime Shared Library)类型。普通SWC在编译时会嵌入到SWF中,而RSL...

    MyEclipse Flex环境配置详解

    4. 在“Flex Build Path”选项中,可以配置所需的库(如SWC文件)。 5. 完成配置后,点击“Finish”创建项目。 五、编写Flex代码 1. 在新建的Flex项目中,右键点击“src”目录,选择“New” -&gt; “ActionScript ...

    使用FlexBuilder3制作并导出AIR1.0正式版应用

    5. **添加库和资源**: 如果应用需要额外的库或资源,可以通过引入SWC文件或放置资源文件到项目的指定目录来实现。 6. **测试应用程序**: 在开发过程中,可以使用内置的AIR模拟器或者直接在连接的物理设备上运行测试...

    fl.zip_flex

    在Flex项目中,开发者可以引入SWC文件来复用代码、组件或者库服务,提高开发效率。"fl.swc"这个库文件特别之处在于它包含了"fl.*"命名空间下的所有类,这意味着它可能包含了Flex SDK中与绘图、动画、UI组件等相关的...

Global site tag (gtag.js) - Google Analytics