`
hiphunter921
  • 浏览: 68483 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

AIR 中 使用 BlazeDS 消息服务

阅读更多

下载了wing酱的新浪微博AIR版,突然对Adobe AIR 产生了兴趣,刚巧遇上国内某聊天软件与某杀毒软件闹矛盾,本来就对这些软件没有好感的我就萌生一个念头,用AIR写个小小聊天工具,嘿嘿,我就立马想到了以前在RIA中使用过的BlazeDS RemoteObject,听说有个message service,所以来试试吧。

 

At the beginning, i tried to use the lastest version of sdk, so i download the Flex SDK 4.1(build 16076) and setup it successfully.

However, when I tried to run my AIR application, I ran into this error:

VerifyError: Error #1014: Class IIMEClient could not be found.

 

After doing a bit of research I found out that my Adobe AIR project’s application descriptor file wasn’t using the correct namespace for the AIR 2.0 SDK. According to the Adobe AIR 2 Release Notes:


 

I made the change in the descriptor file, and now everything works perfectly.

 

 

Flex code as follow:

 

<s:Producer id="producer"/>

<s:Consumer id="consumer"/>

import mx.messaging.ChannelSet;
import mx.messaging.channels.AMFChannel;
import mx.messaging.events.MessageEvent;
import mx.messaging.messages.AsyncMessage;

private function init():void{
	consumer= new Consumer();
	consumer.destination = "chat";
	var channel:AMFChannel=new AMFChannel("my-long-polling-amf","http://192.168.2.80:8080/TestFlex/spring/messagebroker/amflongpolling");
	var channelSet:ChannelSet = new ChannelSet();
	channelSet.addChannel(channel);
	consumer.channelSet=channelSet;
	consumer.addEventListener(MessageEvent.MESSAGE, function(event:MessageEvent):void{
	chatText.text += event.message.body.chatMessage + "\n"; 
        });
	consumer.subscribe();			
				
	producer.destination="chat";
	producer.channelSet= channelSet;
				
}
			
protected function button1_clickHandler(event:MouseEvent):void{
	var message:AsyncMessage = new AsyncMessage(); 
	message.body.chatMessage = inputChat.text; 
	producer.send(message); 
	inputChat.text = ""; 
}
 

The server side configuration:

In order to use long polling amf channel , I added some config into the service-config.xml:

<channel-definition id="my-long-polling-amf" class="mx.messaging.channels.AMFChannel">
	<endpoint url="http://{server.name}:{server.port}/{context.root}/spring/messagebroker/amflongpolling" class="flex.messaging.endpoints.AMFEndpoint"></endpoint>
	<properties>
		<polling-enabled>true</polling-enabled>
		<wait-interval-millis>-1</wait-interval-millis>
		<polling-interval-millis>100</polling-interval-millis>
		<max-waiting-poll-requests>50</max-waiting-poll-requests>
	</properties>	    
</channel-definition>
  • wait-interval-millis dictates how long the server should wait before returning a polling request. The default is 0. By setting it to -1, we are telling it to wait indefinitely until a message is to be routed to the client.
  • polling-interval-millis is the time interval between polling requests. Since we no longer need to pace the requests, we could safely set the interval to 0.
  • max-waiting-poll-requests caps the number of long polling clients. Since the server is not ackowleging right away during long polling, each client hogs one server thread. Once the cap is reached, any new clients fall back to simple polling clients.

We can see the specification of BlazeDS channel and endpoint from here .

 

I use the spring flex integration framework to my app. So i add some code to the applicationContext_flex.xml:

<flex:message-broker>		
	<flex:message-service default-channels="my-streaming-amf,my-long-polling-amf,my-polling-amf" />
</flex:message-broker>
	
<flex:message-destination id="chat" />

I defined a message destination named 'chat', hence the client side can use the name as the destination name.

 

tip:

  • In the AIR app, we also need to set a Flex Server to it for using blazeds.

  • To use a producer or a consumer , we need to set its channel.

In the RIA, i used to code like this:

var channelSet:ChannelSet = new ChannelSet(["my-long-polling-amf"]);

 

But in the AIR, there are some difference.  It need giving fully qualified url's including the port for the destination, and using addChannel function instead of just using the ChannelSet constructor:

var channel:AMFChannel=new AMFChannel("my-long-polling-amf","http://192.168.2.80:8080/TestFlex/spring/messagebroker/amflongpolling");

var channelSet:ChannelSet = new ChannelSet();
channelSet.addChannel(channel);

 

  • 大小: 33.8 KB
  • 大小: 34.6 KB
  • 大小: 79.1 KB
分享到:
评论

相关推荐

    使用BlazeDS实现Java和Flex通信

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

    flex使用BlazeDS远程调用java例子.

    在本例子中,我们将探讨如何使用Flex与Java后端进行远程调用,借助Adobe的BlazeDS服务。BlazeDS是Flex与Java服务器之间通信的一个中间件,支持AMF(Action Message Format)协议,提供数据推送、拉取和消息代理等...

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

    6. **配置文档**:压缩包中的配置文件可能包括`services-config.xml`,用于配置BlazeDS的服务,包括频道设置、消息代理等;还有可能包括`web.xml`,在Servlet容器中部署BlazeDS时进行必要的配置。 7. **jar包**:...

    blazeds开发者指南中英文对照版

    BlazeDS是Adobe公司推出的一款强大工具,专为Adobe Flex或Adobe AIR等客户端应用程序提供高效、可扩展的远程访问和消息服务。它允许客户端应用与服务器端数据进行连接,并在多客户端间传输数据,实现真正的实时消息...

    blazeDS(讲得很详细)

    消息服务是BlazeDS的另一大亮点,它允许客户端作为消息生产者(Producer)发送消息,而消息消费者(Consumer)订阅并接收消息。这种异步通信方式特别适用于实时更新和多用户协作的场景。此外,BlazeDS通过JMSAdapter...

    BlazeDS开发者指南中文版

    1. **设置环境**:首先需要安装Adobe Flex Builder或使用其他IDE集成BlazeDS库,同时在服务器端部署BlazeDS服务。 2. **创建服务**:在服务器端定义Java服务,这些服务通常以Spring Bean的形式存在,可以通过注解或...

    blazeds和flex整合

    4. **数据访问组件**:在Flex中使用`RemoteObject`或`WebService`组件调用后端服务。 5. **事件监听和处理**:在Flex客户端代码中添加事件监听器,处理服务器推送的数据。 **示例应用:FlexTest** "FlexTest"可能是...

    使用BlazeDS实现Flex与Java通信

    通过 BlazeDS,你可以方便地调用 Java 对象的方法,并且它还提供了远程调用(Remoting)功能以及Web消息传递(Web Messaging)功能,支持Comet样式的消息推送,使得服务器能够主动向客户端发送数据。 在Windows环境...

    [BDS]BlazeDS开发者指南

    **BlazeDS**是一款由Adobe提供的开源服务,它主要用于在Flex或AIR等客户端程序与后端服务器之间建立高效的通信渠道。该工具允许开发者轻松地在客户端与服务器之间进行数据交换,并实现实时消息推送功能。 #### 二、...

    BlazeDS配置安装

    2. **services-config.xml**:这是BlazeDS的核心配置文件,用于定义服务、目的地和消息通道。在这个文件中,可以设置日志级别、服务类型、安全策略等。例如,下面的代码段用于设置日志级别为Error,并自定义日志前缀...

    Flex之BlazeDS文档

    Flex和AIR程序使用Flex组件与BlazeDS服务器进行通信,包括RemoteObject、HTTPService、WebService、Producer和Consumer等组件。这些组件都是Flex SDK的一部分。除了Flex或AIR之外,也可以结合使用HTML和JavaScript...

    Flex+JAVA+BlazeDS开发环境配置(Java工程和Flex工程独立)

    BlazeDS 的核心功能包括远程调用服务和消息传递服务。远程调用服务允许 Flex 客户端直接调用服务器端的 POJOs(Plain Old Java Objects)、Spring 服务或 EJB 方法,极大地简化了分布式应用的开发。消息传递服务则...

    BlazeDS Developer Guide中文版

    - 在客户端代码中使用 RemoteObject 组件来调用远程服务的方法,并处理返回的数据。 - **消息服务例子**: - 设置消息目的地。 - 创建 Producer 来发送消息。 - 创建 Consumer 来监听并处理消息。 #### 七、创建...

    彻底理解blazeds

    3. **JMS Integration** - Blazeds还支持与Java消息服务(JMS)的集成,这意味着它可以作为一个JMS客户端,发送和接收JMS消息。这种能力增强了Blazeds的灵活性,使其能够在复杂的分布式系统中作为消息传递的中介。 ...

    Spring MVC+BlazeDS+Flex框架实践

    5. 建立连接:在Flex客户端,使用RemoteObject或HTTPService组件连接到BlazeDS服务。 6. 测试与调试:运行Flex应用,确保前端和后端的通信正常。 **最佳实践** 1. 数据传输优化:使用AMF减少网络传输开销,提高数据...

    建立连接BlazeDS远程端的Flex应用程序

    本文将深入探讨如何在FlashBuilder4beta环境中使用BlazeDS创建与远程服务器交互的Flex应用程序。 **关键知识点概述** 1. **BlazeDS的基本概念** - BlazeDS作为中间件,提供了一种机制,使Flex客户端能够透明地...

    BlazeDs开发应用.pdf

    RPC Services利用请求/响应模式,而消息服务则使用发布/订阅模式来广播数据给订阅者,同时结合请求/响应处理消息发布和数据交换问题。 6. **Channels和Endpoints**:通道是客户端与服务器通信的途径,负责数据封装...

    BlazeDS配置

    无论是在Web应用(Flash Player)还是桌面应用(Adobe AIR)中,BlazeDS都能无缝工作,兼容多种Java应用服务器,如Tomcat、WebSphere、WebLogic、JBoss以及ColdFusion。 总之,BlazeDS通过AMF协议实现了Java和Flex...

Global site tag (gtag.js) - Google Analytics