LCDS:Messaging Service 入门 example

本文介绍如何使用Flex和BlazeDS实现消息的实时推送和协作传送。通过配置AMF轮询频道,客户端可以每秒向服务器请求一次消息更新。利用Producer组件发送消息,并通过Consumer组件接收消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础知识http://keren.iteye.com/blog/479000

 

    Message Service 提供发布(publish) /订阅(subscribe) 机制允许Flex 应用程序发布消息、订阅消息终端(messaging destination),从而实现数据的实时推动协作传送

  消息终端在messaging-config.xml配置,其中频道(channel)是其关键元素,它用来实现客户端和服务器端交换数据。使用BlazeDS,消息终端通常用作streaming 频道或者polling 频道。

  使用streaming频道,服务器端会一直响应 HTTP请求直到该频道连接被关闭,它允许服务器向客户端不断传送大量的数据 。因为HTTP 连接是独一无二的,这实现数据的双向传送,每个streaming AMF或者HTTP频道事实上需要两个浏览器 HTTP连接,一个连接需要不断处理服务器端与频道紧密相关的客户端的响应。另外需要一个短暂连接,只有当数据需要传送到服务器时,它才脱离浏览器连接池;当短暂连接不再需要时,它立即被释放回浏览器连接池。

  polling频道可以通过简单的时间间隔 或者使用服务器等待来配置,如果数据不马上可用 (长轮循)的话。另外,每次轮循响应完成请求。默认下浏览器HTTP 1.1的连接是持续的,浏览器轮循已有的连接,发送并发的轮循请求,以此来减轻轮循的开销。

  当需要准实时通信 时,streaming 频道是最好选择。

 

Messaging Service可以让 某个客户端其他客户端 之间 发送接收 信息。

 

1. 在“services-config.xml ”中添加以下内容:(记住channel 名字为amfpoll ,后面会用到)

设置polling频道的间隔 是1秒钟,即客户端每隔1秒钟就会向服务器请求这个消息。

使用polling频道是客户端获取更新最简单的途径

 

<channel-definition id="my-amf-poll" class="mx.messaging.channels.AMFChannel">
	<endpoint
		url="http://{server.name}:{server.port}/{context.root}/messagebroker/amfpoll"
		class="flex.messaging.endpoints.AMFEndpoint"/>
	<properties>
		<polling-enabled>true</polling-enabled>
		<polling-interval-seconds>1</polling-interval-seconds>
	</properties>
</channel-definition>
 

2. 在“messaging-config.xml ”中添加以下内容:

 

<destination id="MessagingDestination" channels="my-amf-poll"/>
 

3. 建立一个mxml:(需手动建立channel

Flex客户端使用 Producer 组件来发送 一个消息到服务器

  • 创建 AsyncMessage 类的对象,设置该对象的 body 属性
  • 调用 Producer.send() 方法进行发送

使用 Consumer 组件接收 消息

  • 使用 Consumer.subscribe () 来订阅 消息

 

<?xml version="1.0"?>
<!-- intro\intro_messaging.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
	width="100%" height="100%"
	creationComplete="consumer.subscribe();">
	
	<mx:Script>
	<![CDATA[
		import mx.messaging.events.MessageFaultEvent;
		import mx.messaging.events.MessageEvent;
		import mx.messaging.messages.AsyncMessage;
		import mx.messaging.Producer;
		import mx.messaging.Consumer;
		// Send the message in response to a Button click.
		private function sendMessage():void {
			var msg:AsyncMessage = new AsyncMessage();
			msg.body = "Foo";
			producer.send(msg);
		}
		// Handle the received message.
		private function messageHandler(event:MessageEvent):void {
			ta.text += "Consumer received message: "+ event.message.body + "\n";
		}
		// Handle a message fault.
		private function faultHandler(event:MessageFaultEvent):void {
			ta.text += "Received fault: " + event.faultString + "\n";
		}
	]]>
	</mx:Script>

	<!-- 设置channel为amfpoll -->
	<mx:AMFChannel id="myamf"
				   uri="/ptp/messagebroker/amfpoll"/>
	<mx:ChannelSet id="channelSet"
				   channels="{[myamf]}"/>
	
	<mx:Producer id="producer" channelSet="{channelSet}"
		destination="MessagingDestination"
		fault="faultHandler(event);"/>
		
	<mx:Consumer id="consumer" channelSet="{channelSet}"
		destination="MessagingDestination"
		fault="faultHandler(event);"
		message="messageHandler(event);"/>
		
	<mx:Button label="Send" click="sendMessage();"/>
	
	<mx:TextArea id="ta" width="100%" height="100%"/>

</mx:Application>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值