`

blazeds推送技术至Flex

阅读更多

第一步下载blazeds.war
第二步修改两个配置文件:services-config.xml,messaging-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>

 

 

第三步:创建一个Servlet:

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 final long serialVersionUID = 1L;
    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) {
                }

            }
        }
    }

}

 

 

第四步:创建一个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;
    }

}

 

 

第五步:
配置Flex项目:
Root Folder:C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\blazeds
Root URL:http://localhost:8080/blazeds
Context Root:/blazeds

第六步:创建AS类:

package cn.sloppy
{
    [RemoteClass(alias="cn.bestwiz.design.tc.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;

    }
}

 

 

第七步:Flex主程序代码

 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:Panel x="524" y="47" 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>

 

 

第七步:运行Flex:http://localhost:8080/blazeds/HelloWorld-debug/HelloWorld.html?debug=true
点击Button
迂曲运行Servlet:http://localhost:8080/blazeds/TickCacheServlet?cmd=start
再看看Flex的效果:是不是文字一直在增长?
恭喜。成功了。

分享到:
评论
7 楼 gxz1989611 2013-10-14  
vigiles 写道
请问楼主:

[Fault] exception, information=[MessagingError message='Channel 'my-streaming-amf' does not exist in the configuration.']
Fault, createChannel() at ServerConfig.as:564

这个如何解决?

我也出现了这个问题:
[MessagingError message='Channel 'my-streaming-amf' does not exist in the configuration.']
at mx.messaging.config::ServerConfig$/createChannel()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\config\ServerConfig.as:486]
at mx.messaging.config::ServerConfig$/getChannel()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\config\ServerConfig.as:222]
at mx.messaging::ChannelSet/hunt()[C:\autobuild\3.2.0\frameworks\projects\rpc\src\mx\messaging\ChannelSet.as:1408]
我已经在web.xml里面配置了servlet加载services-config.xml了,还是报错。
<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<display-name>MessageBrokerServlet</display-name>
<servlet-class>flex.messaging.MessageBrokerServlet</servlet-class>
<init-param>
<param-name>services.configuration.file</param-name>
<param-value>/WEB-INF/flex/services-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
6 楼 vigiles 2013-08-20  
请问楼主:

[Fault] exception, information=[MessagingError message='Channel 'my-streaming-amf' does not exist in the configuration.']
Fault, createChannel() at ServerConfig.as:564

这个如何解决?
5 楼 sunjiyun26 2013-03-14  
没收到消息,不知道那儿的问题。
4 楼 mrzhanghuzi 2012-07-02  
怎样实现跨域消息推送呢
3 楼 火种烤冰 2011-09-28  
我这里接收不到消息,messageHandler不触发
2 楼 fhuan123 2011-08-18  
cason_0308 写道
这个例子能跑?

这个例子肯定能跑,我写的文章肯定都是自己跑过的,因为我也会用博客当资料查询。不能跑,我放上来做什么~
1 楼 cason_0308 2011-08-15  
这个例子能跑?

相关推荐

    FLEX_Blazeds数据推送技术

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

    Flex + blazeds + Java推送

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

    flex+spring+blazeds消息推送

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

    基于BlazeDS实现股票系统中Flex与Java的通信.pdf

    一、 Flex技术概述 Flex是一种高效、免费的开源框架,也是一种RIA(Rich Internet Applications)解决方案。它可以用于构建具有极强表现力的Web或桌面应用程序。这些应用程序利用Adobe Flash Player和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的消息推送技术主要涉及的是前端Flex应用与后端Java服务器之间的实时数据交互。在Web应用程序中,传统的HTTP协议是基于请求-响应模型的,客户端(浏览器)发起请求,服务器响应,然后连接关闭。然而,对于...

    blazeds下载,java和flex的通信工具

    3. **LiveCycle Data Services (LCDS)**:Blazeds的一个高级版本,提供了更强大的数据服务,如数据网格、数据推送、事务支持和高级缓存。 4. **包含的WAR文件**:`WEB-INF`和`META-INF`是Java Web应用的标准目录...

    blazeds和flex整合

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

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

    总之,通过Java BlazeDS Flex技术,我们可以构建一个高效、实时的聊天室应用,利用服务器推送实现消息的即时传递。这种方法不仅可以应用于聊天室,还可以扩展到股票交易、在线协作等实时应用场景。

    flex 推送 例子

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

    使用BlazeDS实现Java和Flex通信

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

    消息推送 blazeds

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

    FLex与Java交互必备blazeds

    LiveCycle Data Services提供了数据缓存、数据推送等功能,进一步优化了Flex应用的性能和响应速度。 在Blazeds中,Flex客户端通过AMF(Action Message Format)协议与Java后端通信。AMF是一种二进制的序列化格式,...

    使用BlazeDS实现flex与java 整合

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

    Flex-Spring-JAVA-BLAZEDS.rar_Flex spring_flex_flex java

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

    flex+blazeds+spring

    BlazeDS是Adobe提供的一个免费服务器端技术,它为Flex客户端提供了与Java应用程序交互的能力,包括实时消息传递、Remoting和数据推送等功能。Spring是一个广泛使用的Java企业级应用开发框架,它简化了Java应用程序的...

    Blazeds向客户端推送数据.

    例如,`Tick`类包含了如`askPrice`、`bidPrice`和`midPrice`等字段,这些字段可以通过Blazeds框架序列化为AMF格式,然后通过通道推送到Flex客户端。 4. **服务器端处理**:在服务器端,需要编写Java服务端代码来...

    BLAZEDS后台数据推送

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

Global site tag (gtag.js) - Google Analytics