例六:发布和订阅消息(数据推送用例)

来源:互联网 发布:python写入txt文件 编辑:程序博客网 时间:2024/06/06 01:52
在这个例子里面,一个java组件向一个消息队列发布一个假的实时数值,flex客户端订阅这个队列让那后实时显示这个这些值。

1.启动服务器端feed组件,可以访问

testdrive-datapush/startfeed.jsp

2.单击订阅feed终端按钮,推送的值就出现在了文本域中。

3.尝试结束后,结束feed,访问:

testdrive-datapush/startfeed.jsp

代码分析:

打开testdrive-datapush/src目录查看源代码

代开下列服务器端的源代码:

WEB-INF/src/flex/samples/feed/Feed.Java

WEB-INF/flex/messaging-config.xml

flex支持发布/订阅消息通过blazeds的消息服务,这个消息服务管理flex客户端能发送和能订阅的一个终端集合,flex提供了两个组件,生产者和消费者,你使用消费者的subscribe()方法定于一个终端。当一个你订阅的终端发布消息的时候,你能订阅到它,消费者的消息事件会被触发。

在Feed.java,blazeds的(apiMessageBroker, AsyncMessage)被用来向终端发布消息。另外一个实现java和flex交换消息的选择是映射终端到jms主题,本质上允许一个flex客户端发布和订阅jms主题,除了jms之外,消息服务的适配器结构允许你还集成任何类型的消息系统。

消息终端配置在messaging-config.xml.

一个终端配置中被用来实现客户端和服务器交换的关键元素是channel,一般使用streaming或者polling通道。

使用流通道,服务器的响应回一直持续到连接关闭,允许服务器下发增量的大块数据,http连接不是双向的,这意味着一个但对amf流或者http通道哦啊实际上需要两个浏览器http连接有序的两个方向数据发送,一个是是服务器到客户端的的数据流响应,使用通道的客户端。和第二个短暂的连接,当数据需要发送的时候从浏览器池中取得数据。这个短暂的连接会马上释放回浏览器的连接池。

一个投票的通道可以用来配置一个简单的间隔或者不是立即执行的应用,在每一种情况下,每个poll响应结束请求,浏览器http1.1连接默认情况下是持久的,所以浏览器可以循环存在的连接来发送随后的在poll头下面的低级poll请求。

当实时连接需要的饿时候可以使用steaming通道。

ie和ff的不同:

浏览器对于每个回话都有一个连接数量的限制。

ie是每个会话是两个连接,如果你启用多个ie实体从同一个操作系统或者同一个快捷方式,每个实例是在不哦他能够的进程中的,他们会掌控各自的回话,如果你使用一个新的ie窗口在一个存在的实例上,新窗口会分享同一个会话,也就是说你可以开启多个线程来获得不限量的http 流来接受数据,如果只有一个线程那么所有的页面都会分享两个连接

火狐里面是每个会话8个连接,再多企图连接服务器就回失败,blazeds提供了一个优雅的机器来捕获这种情形:一个客户端总是尝试使用终端定义通道列表中的第一个通道,如果连接失败,客户端回自动跳到第二个通道,在这个例子里面我们对所有的终端使用下面的默认通道设置

<default-channels>

<channel ref="my-streaming-amf"/>

<channel ref="my-polling-amf"/>

</default-channels>

也就是说,客户端程序回首先从哪个是使用流通道当流通道连接失败时才去尝试poll通道







原创粉丝点击