`

flex builder + blazeds 实现点对点的聊天

阅读更多
这两天研究用blazeds实现web点对点的聊天功能,在网上各种查找资料,有点收获。

一 环境搭建
   下载 blazeds.war,放在tomcat的webapps下,启动tomcat,会发现多了一个blazeds文件夹。
    在webapps下新建文件夹MyTest,将blazeds中的文件拷入
   在flex builder3中新建j2ee项目MyTest,在配置server时书写如下:
   root folder  D:\work\apache-tomcat-6.0.30\webapps\MyTest
   root url  http://localhost:8080/MyTest/
   context root /MyTest

二 代码和配置文件

chat.mxml


<?xml version="1.0" encoding="utf-8"?>
<!-- BlazeDS or LiveCycle Data Services is required to use the approach described in this sample -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
				backgroundGradientColors="[0x000000,0x323232]"
				applicationComplete="init()"
				viewSourceURL="srcview/index.html">

	<mx:Script>
		<![CDATA[
			import mx.messaging.messages.AsyncMessage;
			import mx.messaging.messages.IMessage;


			[Bindable]
			private var selectorIDs:String

			private function init():void
			{
				selectorIDs="ids= " + Math.floor(Math.random() * 1000);
				this.log.text=selectorIDs;
				// Start listening for messages published in the "chat" destination
				consumer.subscribe();
				
			}

			private function send():void
			{
				var message:IMessage=new AsyncMessage();
				message.headers=new Array();
				message.headers["ids"]=this.targetId.text;
				message.body.chatMessage=msg.text;
				producer.send(message);
				msg.text="";
			}

			private function messageHandler(message:IMessage):void
			{
				log.text+=message.body.chatMessage + "\n";
			}
		]]>
	</mx:Script>

	<!-- The producer is used to send messages -->
	<!-- See the definition of the "chat" destination in messaging-config.xml -->
	<mx:Producer id="producer"
				 destination="chatServer"/>

	<!-- The consumer is used to listen for messages.
		 When a message is published in the "chat" destination the message event handler
		 is automatically executed -->
	<mx:Consumer id="consumer"
				 selector="{selectorIDs}"
				 destination="chatServer"
				 message="messageHandler(event.message)"/>

	<mx:Panel title="ChatServer"
			  width="100%"
			  height="100%">
		<mx:TextArea id="log"
					 width="100%"
					 height="100%"/>
		<mx:ControlBar height="63">
			<mx:TextInput id="targetId"/>
			<mx:TextInput id="msg"
						  width="100%"
						  enter="send()"
						  height="24"/>
			<mx:Button label="Send"
					   click="send()"/>
		</mx:ControlBar>
	</mx:Panel>

</mx:Application>


massaging -config.xml

<?xml version="1.0" encoding="UTF-8"?>
<service id="message-service" 
    class="flex.messaging.services.MessageService">

    <adapters>
        <adapter-definition id="actionscript" class="flex.messaging.services.messaging.adapters.ActionScriptAdapter" default="true" />
         <adapter-definition id="jms" class="flex.messaging.services.messaging.adapters.JMSAdapter"/> 
    </adapters>

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

	
	<destination id="chatClient">
        
        <properties>
            <network>
                <session-timeout>0</session-timeout>
            </network>
            <server>
                <max-cache-size>1000</max-cache-size>
                <message-time-to-live>0</message-time-to-live>
                <durable>false</durable>
            </server>
        </properties>
        <channels>
        <channel ref="my-streaming-amf" />
        </channels>
    </destination>

</service>


services -config.xml

<?xml version="1.0" encoding="UTF-8"?>
<services-config>

    <services>
        <service-include file-path="remoting-config.xml" />
        <service-include file-path="proxy-config.xml" />
        <service-include file-path="messaging-config.xml" />        
    </services>

    <security>
        <login-command class="flex.messaging.security.TomcatLoginCommand" server="Tomcat"/>
        <!-- Uncomment the correct app server
        <login-command class="flex.messaging.security.TomcatLoginCommand" server="JBoss">
		<login-command class="flex.messaging.security.JRunLoginCommand" server="JRun"/>        
        <login-command class="flex.messaging.security.WeblogicLoginCommand" server="Weblogic"/>
        <login-command class="flex.messaging.security.WebSphereLoginCommand" server="WebSphere"/>
        -->

        <!-- 
        <security-constraint id="basic-read-access">
            <auth-method>Basic</auth-method>
            <roles>
                <role>guests</role>
                <role>accountants</role>
                <role>employees</role>
                <role>managers</role>
            </roles>
        </security-constraint>
         -->
    </security>

    <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="3"/>
                    <user-agent match-on="Firefox" kickstart-bytes="2048" max-streaming-connections-per-session="3"/>
                </user-agent-settings>
            </properties>
        </channel-definition> 
		


        <channel-definition id="my-amf" class="mx.messaging.channels.AMFChannel">
            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/amf" class="flex.messaging.endpoints.AMFEndpoint"/>
        </channel-definition>

        <channel-definition id="my-secure-amf" class="mx.messaging.channels.SecureAMFChannel">
            <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/amfsecure" class="flex.messaging.endpoints.SecureAMFEndpoint"/>
            <properties>
                <add-no-cache-headers>false</add-no-cache-headers>
            </properties>
        </channel-definition>

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

        <!--
        <channel-definition id="my-http" class="mx.messaging.channels.HTTPChannel">
            <endpoint url="http://{server.name}:{server.port}/{context.root}/messagebroker/http" class="flex.messaging.endpoints.HTTPEndpoint"/>
        </channel-definition>

        <channel-definition id="my-secure-http" class="mx.messaging.channels.SecureHTTPChannel">
            <endpoint url="https://{server.name}:{server.port}/{context.root}/messagebroker/httpsecure" class="flex.messaging.endpoints.SecureHTTPEndpoint"/>
            <properties>
                <add-no-cache-headers>false</add-no-cache-headers>
            </properties>
        </channel-definition>
        -->
    </channels>

    <logging>
        <target class="flex.messaging.log.ConsoleTarget" level="Error">
            <properties>
                <prefix>[BlazeDS] </prefix>
                <includeDate>false</includeDate>
                <includeTime>false</includeTime>
                <includeLevel>false</includeLevel>
                <includeCategory>false</includeCategory>
            </properties>
            <filters>
                <pattern>Endpoint.*</pattern>
                <pattern>Service.*</pattern>
                <pattern>Configuration</pattern>
            </filters>
        </target>
    </logging>

    <system>
        <redeploy>
            <enabled>false</enabled>
            <!-- 
            <watch-interval>20</watch-interval>
            <watch-file>{context.root}/WEB-INF/flex/services-config.xml</watch-file>
            <watch-file>{context.root}/WEB-INF/flex/proxy-config.xml</watch-file>
            <watch-file>{context.root}/WEB-INF/flex/remoting-config.xml</watch-file>
            <watch-file>{context.root}/WEB-INF/flex/messaging-config.xml</watch-file>
            <watch-file>{context.root}/WEB-INF/flex/data-management-config.xml</watch-file>
            <touch-file>{context.root}/WEB-INF/web.xml</touch-file>
             -->
        </redeploy>
    </system>

</services-config>


三 点对点的通信
   代码中有所体现,生产者指定目的id(自己定的,比如用户在数据库中的唯一识别符),服务器通过id对订阅者进行过滤。

四 维护在线状态
    查了下资料,可能是通过监听session的状态来实现(这样只能保证服务器知道在线状态,可能还需要服务器广播次id的状态,然后使每一个客户端都能更新在线列表,只是想法,不知能否实现)

参考资料
http://hi.baidu.com/sant009/blog/item/a7fe4edb571f3561d1164e7b.html
http://blog.csdn.net/kvgnt/article/details/6822267
http://ewardluo.blog.163.com/blog/static/4845696200951704352172/
分享到:
评论
1 楼 mengfei86 2012-06-18  

相关推荐

    Flex4+Blazeds4.0+Spring3.0+hibernate2.5.2整合笔记

    本篇笔记主要介绍了如何将 Flex4、Blazeds4.0、Spring3.0 和 hibernate2.5.2 进行整合,实现一个完整的富互联网应用程序。下面是对笔记中关键部分的详细解释: 准备工作 在开始整合之前,需要准备以下软件和资源:...

    MyEclipse+Flex.Builder+Tomcat+BlazeDS.pdf

    本文主要介绍如何配置一套开发环境,用于在MyEclipse中集成Flex\Builder、Tomcat和BlazeDS,以便开发Java与Flex相结合的Web应用程序。以下是对每个组件及其安装配置过程的详细说明: 1. **Flex.Builder**: Flex ...

    MyEclipse 8.5+Flex+BlazeDs通信

    MyEclipse 是一个强大的集成开发环境(IDE),特别适合于 Java 开发,而 Flex 是一种用于创建交互式用户界面的开源框架,BlazeDs 则是 Adobe 推出的服务器端数据服务组件,用于实现在 Flex 客户端和 Java 应用服务器...

    Myeclipse8.5+flex4.5+Blazeds+SSH环境搭建

    3. **BlazeDS**:BlazeDS 是 Adobe 提供的一个开源项目,用于实现 Flex 应用与 Java 服务器之间的远程调用(Remoting)和消息传递(Messaging)。它作为中间件,使 Flex 客户端可以与 Java 后端进行数据交互,通常...

    跟我一步步搭建+PureMVC+Flex+BlazeDS+Spring+Hibernate

    以上步骤中,每一步都涉及到对特定技术的深入理解和操作,例如MyEclipse的使用、Flex与BlazeDS的集成、Spring和Hibernate的配置以及PureMVC架构的实现。这些知识点构成了整个搭建过程的基础,为开发者提供了一条清晰...

    ArcGISforflex+blazeds+java开发实例

    总的来说,这个实例展示了如何将ArcGIS for Flex的可视化能力、BlazeDS的实时通信功能以及Java和Oracle数据库的强大数据处理能力整合在一起,实现高效、互动的GIS应用。通过深入学习和实践,开发者可以掌握GIS应用...

    Flex + LCDS(Blazeds) + Java 入门教程

    【Flex + LCDS(Blazeds) + Java 入门教程】是一篇旨在引导初学者了解如何构建基于Flex、LCDS(LiveCycle Data Services)和Java的开发环境,并实现它们的集成与通信的教程。Flex是一种用于创建富互联网应用程序(RIA...

    使用BlazeDS实现Java和Flex通信

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

    Flex Blazeds入门教程

    MyEclipse是一个强大的J2EE开发工具,Flex Builder 3则提供了对Flex项目的高级支持,LCDS则是数据服务的关键组件,Tomcat用作应用服务器。 2. **安装过程**:略 #### 四、入门教程详解 1. **新建Flex LCDS工程**...

    flex+spring+hibernate

    总结来说,搭建Flex+Spring+Hibernate+BlazeDS环境需要对Java EE、Flex和Spring有基本了解。通过BlazeDS,可以充分利用Flex的交互性优势,结合Spring的强大功能和Hibernate的ORM特性,创建出高效、灵活的Web应用。...

    【尝鲜】Flex Builder 4与Java整合开发

    6. **调试和测试**:Flex Builder 4提供了强大的调试工具,可以对ActionScript代码进行断点调试,同时也支持远程调试Java服务。此外,使用JUnit等测试框架,可以在Java端进行单元测试,确保业务逻辑的正确性。 7. *...

    flex4.5+SSH项目搭建

    7. **整合过程**:集成Flex和SSH涉及到几个关键步骤,包括设置Flex Builder或MyEclipse的Blazeds配置,编写ActionScript代码与后端服务交互,配置Struts2的Action和Result,以及在Spring中定义Bean和数据源。...

    blazeds 的点对点的消息发布和订阅

    本文将深入探讨Blazeds的点对点(P2P)消息发布和订阅机制,以及如何利用其源码和工具来实现高效的数据通信。 在Blazeds中,消息发布和订阅是Flex客户端与服务器之间通信的核心机制。这种机制允许应用程序实时地...

    快速搭建基于BlazeDS的FLEX+JAVA WEB应用

    BlazeDS是Adobe官方提供的一种开源工具,它允许在Flex客户端和Java服务器之间实现双向通信,支持AMF(Action Message Format)数据传输,提高了Web应用的性能和用户体验。 描述中提到的“NULL 博文链接:...

    FLEX_JAVA_BlazeDS独立部署DEMO.rar

    通过这个DEMO,学习者可以深入了解Flex和BlazeDS的集成过程,掌握如何创建和部署一个实时通信的RIA应用,并对视频通话系统的实现有深入的理解。同时,这也是一个很好的实践平台,可以锻炼开发者在实际项目中的问题...

Global site tag (gtag.js) - Google Analytics