`

Blazeds推送到Flex(详细版)

    博客分类:
  • flex
 
阅读更多

重要提示:WEB应用服务器要用tomcat6,blazeds和tomcat7有兼容性问题。

 

1、先创建一个web工程整合Flex,如果不会参考:

http://huanggua12353719.iteye.com/blog/2295720

2、我的工程名为test,在services-config.xml的channels节点内加入

<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>

3、在messaging-config.xml的service节点内加入

<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>

4、在java文件目录src/com包下创建Tick.java

package com;

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; 
    } 
 

5、在java文件目录src/com包下创建DaemonMessage.java

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

import flex.messaging.MessageBroker;
import flex.messaging.messages.AsyncMessage;
import flex.messaging.util.UUIDUtils;
public class DaemonMessage
{
    private static FeedThread thread;
    //开始传递消息
    public void startSendMessage(String flags)
    {
        if (thread == null) 
        {
            thread = new FeedThread();
            thread.start();
        }
    }
    //停止消息发布
    public void stopSendMessage(String flags)
    {
        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();
            System.out.println("clientID="+clientID);
            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(1000);
            } catch (InterruptedException e) {}}}
    }

6、在flex文件目录flex_src下创建Tick.as

package
{
    [RemoteClass(alias="com.Tick")] 
    [Bindable] 
    public class Tick 
    { 
        public function Tick() 
        { 
        } 
        public var askPrice:Number; 
        public var bidPrice:Number; 
        public var midPrice:Number; 
        public var tickTime:Date;; 
        public var seqno:String; 
       
    } 
}

7、在flex主文件test.mxml的内容改成

<?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/mx" 
               minWidth="955" minHeight="600">
    <fx:Script>
        <![CDATA[ 
            import mx.controls.Alert;  
            import mx.messaging.Channel;
            import mx.messaging.ChannelSet;
            import mx.messaging.Consumer;
            import mx.messaging.events.MessageEvent;
            import mx.rpc.events.ResultEvent; 
            private var myConsumer:Consumer = new Consumer(); 
           
            //直接利用Remote来进行远程的消息调用
            //开始订阅消息
            protected function rbt_clickHandler(event:MouseEvent):void
            {
                // TODO Auto-generated method stub
                //利用远程调用来触发开始工作
                subMessage.startSendMessage("start");
                //准备开始订阅消息 
                myConsumer.destination = "tick-data-feed"; 
                //这里也要与后台的主题名称必须相同  www.it165.net
                myConsumer.subtopic = "tick"; 
                myConsumer.channelSet = new ChannelSet(["my-streaming-amf"]); 
                myConsumer.addEventListener(MessageEvent.MESSAGE, remote_messageHandler); 
                myConsumer.subscribe(); 
            } 
            //获取订阅的消息,以文本来显示显示
            private function remote_messageHandler(event:MessageEvent):void 
            {
                var tick:Tick = event.message.body as Tick;
                demot.text = tick.seqno; 
            } 
            //退订该消息
            protected function cbr_clickHandler(event:MouseEvent):void
            {
                subMessage.stopSendMessage("stop");
                myConsumer.unsubscribe(false); 
            } 
            protected function subMessage_resultHandler(event:ResultEvent):void
            {}
        ]]>
    </fx:Script>
    <fx:Declarations>
        <!--用来启动消息发布 -->
        <mx:RemoteObject id="subMessage" destination="RemoteMessage" 
                         result="subMessage_resultHandler(event)"> </mx:RemoteObject>
    </fx:Declarations>
    <s:TextArea x="445" y="42" width="257" id="demot"/> 
    <s:Button x="445" y="210" label="订阅消息Remote" id="rbt" click="rbt_clickHandler(event)"/>
    <s:Button x="597" y="207" label="退订消息R" id="cbr" click="cbr_clickHandler(event)"/>
</s:Application>

8、在remoting-config.xml文件service节点中加入

<destination id="RemoteMessage">
        <properties>
            <source>com.DaemonMessage</source>
        </properties>
    </destination>

9、配置完之后的目录如下:



 10、如果bin-debug目录下没有生成相应的html文件。右键工程-》属性-》Flex编译器-》生成HTML包装器文件(H),去掉勾选,点应用,再勾选上就应用 。testmxml相对应的html文件就出现了。



 11、启动工程,访问http://localhost:8080/test/test/test.html

如果出现404错误,打开test.mxml随便编辑(不能修改代码,可以在末尾添加一个空格,删除一个空格),目的是让工程重新生成对应的html文件,保存。再访问。如果成功出现

 12、点击订阅消息Remote空白框里会出现1、2、3、4 ...不停的在变,点击退订消息R,数字不再变,部署成功。



 

 13、如果这样还不行,可以留言,大家讨论一下。

 

  • 大小: 18.2 KB
  • 大小: 83.5 KB
  • 大小: 3.6 KB
  • 大小: 3.4 KB
分享到:
评论

相关推荐

    Flex + blazeds + Java推送

    Flex + blazeds + Java推送Demo 本例实现由Flex一端客户端发送消息, 然后由Java端在发布到所有订阅的其它Flex端. 里面有说明与源码, 还有一个直接放到Tomcat里面的直接发布的项目 小编使用工具 eclipse3.5 flex sdk...

    FLEX_Blazeds数据推送技术

    FLEX,BlazeDS,JAVA实现服务器端数据推送技术,下载后直接导到你的MYECLIPSE即可运行。先在IE内输入:http://localhost:8080/pushDemo/flex/pushDemo.html,点击“button”后,再另一个IE窗口内输入:...

    flex+spring+blazeds消息推送

    标题中的“flex+spring+blazeds消息推送”是指在开发富互联网应用程序(RIA)时,采用Adobe Flex作为前端UI框架,Spring作为后端服务层框架,BlazeDS作为数据通信中间件,实现服务器到客户端的消息实时推送功能。...

    使用BlazeDS实现Java和Flex通信

    BlazeDS 是一款基于 Java 的服务器端远程方法调用(Remoting)和实时Web消息传递技术,由Adobe官方提供,它使得开发者能够轻松地将Flex和Adobe AIR应用程序连接到后端分布式数据,并实现实时数据推送,从而创建更具...

    BlazeDS实现java后台消息推送flex前台接收的例子

    在"BlazeDS实现java后台消息推送flex前台接收的例子"中,我们主要关注以下几个关键知识点: 1. **BlazeDS架构**:BlazeDS包含了一组服务,如Remoting服务、LiveCycle Data Services(LCDS)以及MessageBroker服务。...

    Flex BlazeDs 推数据生成lineChart实例

    Flex BlazeDs推数据生成lineChart实例是一个典型的前端与后端实时通信的应用场景,它结合了Adobe Flex技术用于前端用户界面的构建,BlazeDS作为数据推送服务,以及使用lineChart组件来展示动态更新的数据。...

    Flex与Java的消息推送

    在Flex和Java集成中,通过BlazeDS支持WebSocket,可以实现真正的实时推送,即服务器可以直接将数据推送到客户端,无需客户端轮询。 在实际应用中,开发人员需要在Java服务器端创建处理推送逻辑的服务,并在Flex...

    使用BlazeDS实现Java和Flex通信之hello world

    下面我们将详细探讨BlazeDS、Flex以及它们之间的通信机制,并通过“hello world”实例来具体说明。 BlazeDS是Adobe公司推出的一个开源项目,主要用于为Flex应用提供与Java应用程序服务器之间的数据集成。它基于AMF...

    blazeds和flex整合

    BlazeDS是Adobe提供的一个开源服务器端数据推送技术,而Flex是用于创建RIA的客户端开发框架。这篇文章将深入探讨这两者如何协同工作,以及它们在实际项目中的应用。 **BlazeDS简介** BlazeDS是Adobe LiveCycle Data...

    Flex-Spring-JAVA-BLAZEDS.rar_Flex spring_flex_flex java

    BlazeDS是Adobe提供的一个服务器端数据推送技术,它允许Flex应用与Java应用服务器进行实时通信。 描述中的“Flex Spring JAVA BLAZEDS整合,永固整合将flex与Spring整合”表明这个压缩包文件包含了如何将这三者结合...

    基于Java_BlazeDS_Flex_服务器消息推的聊天室

    通过Flex的`Flash Remoting`和`Messaging`模块,连接到BlazeDS服务,订阅消息目的地,并设置监听器接收服务器推送的消息。 5. **连接与通信**:Flex客户端通过HTTP或RTMP通道连接到BlazeDS服务器。用户登录后,可以...

    BLAZEDS后台数据推送

    BLAZEDS实现Java后台数据推送到Flex

    flex 推送 例子

    有关于flex推送技术的工程例子,使用blazeds的StreamingAMFChannel 通道实现推送功能。(使用前先启动http://localhost:8080/flex-blazeds/TickCacheServlet?cmd=start)

    blazeds.war开发flex和java的一个中间数据包

    3. **数据推送**:BlazeDS能够实现服务器向客户端的主动数据推送,这对于实时性要求高的应用,如股票交易、在线游戏等场景尤为重要。 4. **数据访问**:BlazeDS可以通过Java的Data Management Services(DMS)与...

    51CTO下载-使用BlazeDS实现Java和Flex通信(PDF+源码

    BlazeDS支持发布/订阅模型,使得Java服务器可以主动向Flex客户端推送数据,而不仅仅是响应客户端请求。 8. **错误处理与安全考虑** - 错误处理:BlazeDS提供异常处理机制,当服务调用失败时,客户端可以捕获并...

    使用BlazeDS实现flex与java 整合

    3. **Real-time Data Push**:BlazeDS支持Server-Sent Events和Long Polling,实现数据的实时推送,使Flex客户端能够实时更新视图。 4. **Security**:在整合过程中,确保数据安全是非常重要的。可以通过配置...

    消息推送 blazeds

    总结一下,BlazDS的消息推送功能使得Flex应用程序能够实现实时数据更新,通过消息订阅机制,服务器可以在有新数据时主动推送到客户端。在Eclipse工程中实现这一功能,包括设置BlazDS服务、配置消息通道、编写客户端...

Global site tag (gtag.js) - Google Analytics