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

Flex+BlazeDS+AIR+StreamingAMFChannel消息服务的即时聊天通信

    博客分类:
  • Flex
阅读更多
采用BlazeDS的StreamingAMFChannel 消息服务的聊天通信,这种方式是最快和延迟最小的了。

BusyChat.mxml文件:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication
 xmlns:fx="http://ns.adobe.com/mxml/2009"
 xmlns:s="library://ns.adobe.com/flex/spark"
 xmlns:mx="library://ns.adobe.com/flex/halo" width="560"
 creationComplete="consumer.subscribe();">
 
 <fx:Script>
  <![CDATA[
   import mx.messaging.messages.AsyncMessage;
   import mx.messaging.messages.IMessage;
   
   private function send():void
   {
    var message:IMessage = new AsyncMessage();
    message.body.chatMessage = msg.text+consumer.clientId;
    producer.send(message);
    msg.text = "";
    
   }
       
   private function messageHandler(message:IMessage):void
   {
    log.text += message.body.chatMessage + "\n"; 
   }
   
  ]]>
 </fx:Script>
 
 <fx:Declarations>
  <mx:ChannelSet id="cs">
   <mx:StreamingAMFChannel url="http://localhost:8050/BusyChat/messagebroker/streamingamf"/>
  </mx:ChannelSet>
  <mx:Producer id="producer"  destination="chat" channelSet="{cs}"/>
  <mx:Consumer id="consumer" destination="chat" channelSet="{cs}" message="messageHandler(event.message)"/>
 </fx:Declarations>
 
 
 <s:Panel title="Chat Test!"   x="20" y="19" width="518" height="295">
  <s:TextArea id="log" x="19" y="11" width="473" height="166"/>
  
  <s:TextInput id="msg" x="19" y="191" width="377" height="46" enter="send()"/>
  <s:Button x="411" y="192" label="发送消息" height="43" width="77" click="send()"/>
 
 </s:Panel>
 
</s:WindowedApplication>


BlazeDS服务器端配置文件
messaging-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="chat">
       
        <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>

proxy-config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<service id="proxy-service"
    class="flex.messaging.services.HTTPProxyService">

    <properties>
        <connection-manager>
            <max-total-connections>100</max-total-connections>
            <default-max-connections-per-host>2</default-max-connections-per-host>
        </connection-manager>
        <allow-lax-ssl>true</allow-lax-ssl>
    </properties>

    <adapters>
        <adapter-definition id="http-proxy" class="flex.messaging.services.http.HTTPProxyAdapter" default="true"/>
        <adapter-definition id="soap-proxy" class="flex.messaging.services.http.SOAPProxyAdapter"/>
    </adapters>

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

    <destination id="DefaultHTTP">
    </destination>

</service>

remoting-config.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<service id="remoting-service"
    class="flex.messaging.services.RemotingService">

    <adapters>
        <adapter-definition id="java-object" class="flex.messaging.services.remoting.adapters.JavaAdapter" default="true"/>
    </adapters>

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

</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" />    
       
        <default-channels>
        <channel ref="my-streaming-amf"/>
     </default-channels>  
     
     
    </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://localhost:8050/BusyChat/messagebroker/streamingamf" class="flex.messaging.endpoints.StreamingAMFEndpoint"/>
            <properties>
                <idle-timeout-minutes>0</idle-timeout-minutes>
                <max-streaming-clients>50</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>
  
        <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>

web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

    <display-name>BlazeDS</display-name>
    <description>BlazeDS Application</description>

    <!-- Http Flex Session attribute and binding listener support -->
    <listener>
        <listener-class>flex.messaging.HttpFlexSession</listener-class>
    </listener>

    <!-- MessageBroker Servlet -->
    <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>

    <servlet-mapping>
        <servlet-name>MessageBrokerServlet</servlet-name>
        <url-pattern>/messagebroker/*</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
    </welcome-file-list>

    <!-- for WebSphere deployment, please uncomment -->
    <!--
    <resource-ref>
        <description>Flex Messaging WorkManager</description>
        <res-ref-name>wm/MessagingWorkManager</res-ref-name>
        <res-type>com.ibm.websphere.asynchbeans.WorkManager</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
    -->

</web-app>

我的服务器端口是8050,下载文件需要修改为tomcat的端口号。
分享到:
评论
1 楼 neusoft_jerry 2014-11-27  
在IE11下my-streaming-amf未能成功建立连接,在360极速浏览器7.5.3.308内核版本30.0.1599.101下好使。

相关推荐

    Flex + blazeds + Java推送

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

    PureMVC+Flex+BlazeDS+Spring+Hibernate.doc

    标题中的“PureMVC+Flex+BlazeDS+Spring+Hibernate.doc”指的是一项整合了多种技术的Web应用开发方案,这些技术包括PureMVC、Flex、BlazeDS、Spring和Hibernate。这篇文档可能是指导读者如何将这些技术结合在一起...

    flex+blazeds+spring

    标题“flex+blazeds+spring”表明我们要探讨的是如何将Flex前端与BlazeDS中继层和Spring后端框架结合起来,实现完整的数据交互和应用程序逻辑。 在Flex与Spring集成的环境中,Flex作为用户界面展示层,负责与用户...

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

    BlazeDS 是一款开源的服务器端技术,由 Adobe 提供,主要用于实现 Java 应用程序与 Flex 客户端之间的通信。它利用 AMF(Action Message Format)协议,这是一种二进制格式,相比基于文本的协议如 XML,AMF 提供了更...

    MyEclipse 8.5+Flex+BlazeDs通信

    特别适合于 Java 开发,而 Flex 是一种用于创建交互式用户界面的开源框架,BlazeDs 则是 Adobe 推出的服务器端数据服务组件,用于实现在 Flex 客户端和 Java 应用服务器之间的实时双向通信。 **MyEclipse 8.5** ...

    Flex+BlazeDS+java通信详细笔记和源代码

    在实际项目中,Flex+BlazeDS+Java通信的应用场景包括股票报价、实时聊天、在线协作工具等需要实时更新数据的场景。通过这种方式,开发者可以利用Flex的强大UI设计能力,结合Java的后端处理能力,构建出高性能、交互...

    flex+spring+blazeds在MyEclipse下非常详细的结合配置

    flex+spring+blazeds在MyEclipse下非常详细的结合配置

    Flex+blazeds+java发布/订阅聊天程序

    综上所述,"Flex+BlazeDS+Java发布/订阅聊天程序"是一个综合运用多种技术的实时通信解决方案,涉及前端开发、后端服务、消息传输和安全等多个层面,为用户提供了一个高效、实时的聊天体验。在实际开发中,还需要根据...

    Flex+blazeds+java企业门户网站完整源码

    总之,这个“Flex+blazeds+java企业门户网站完整源码”是一个很好的学习资源,可以帮助开发者掌握如何利用Flex构建富用户体验的Web应用,并通过BlazeDS实现与Java后端的有效交互,进而构建高效、功能强大的企业级...

    Flex +BlazeDS+java后台分页的实现

    BlazeDS是Adobe官方提供的一个开源项目,它为Flex应用程序提供了与Java服务器之间的实时双向通信。BlazeDS支持AMF(Action Message Format)协议,使得Flex与Java之间的数据交换高效且轻量级。 在Java后台,我们...

    Flex + blazeds + Java入门搭建与简单应用

    Flex作为Adobe公司推出的RIA开发框架,搭配BlazeDS(一个轻量级的消息传递系统)和Java后端,可以构建出功能强大、交互丰富的Web应用。本文将深入探讨如何入门搭建Flex + BlazeDS + Java环境,并介绍其基本应用。 ...

    Flex+blazeds+java发布/订阅聊天程序(带java工程)

    Flex+BlazeDS+Java发布/订阅聊天程序是一种基于客户端-服务器架构的实时通信解决方案,它结合了Adobe Flex的用户界面构建能力、BlazeDS的数据服务功能以及Java后端的强大处理能力,实现了高效的聊天应用程序。...

    Flex+blazeDS+Spring官方Demo,环境搭建

    Flex+blazeDS+Spring官方Demo,环境搭建,内含十几个例子,从易到难,包括spring消息,spring安全,注解方式和非注解配置文件方式,十分好用。内含有tomcat,可直接启动并运行用户手册。

    java+flex+blazeds配合例子

    BlazeDS是Adobe提供的一个开源服务器端组件,它充当Java和Flex之间的通信桥梁,实现了基于AMF(Action Message Format)的高效数据传输。 Java是全球广泛使用的编程语言,尤其在企业级应用开发中占有重要地位。它...

    flex+spring+blazeds消息推送

    在Spring+BlazeDS+Flex的应用中,Quartz可能被用来定期触发服务器端的任务,例如发送通知、更新数据等,然后通过BlazeDS将这些消息推送到Flex客户端。 至于压缩包内的“说明.txt”,这可能包含了项目的配置步骤、...

    flex+Spring+Hibernate+Cairngorm+BlazeDS+Spring BlazeDS Integration整合框架

    使用flex 4.5 + Spring 3.0 + Hibernate 3.3 + Cairngorm 2.2.1 + BlazeDS 3.3.0 + Spring BlazeDS Integration 1.0.3整合出的一个登录的小demo·

    Flex+BlazeDS整合J2ee示例

    总之,`Flex+BlazeDS整合J2ee示例`是一个综合性的项目,涉及前端UI设计、后端服务开发以及两者间的通信机制。学习和理解这个示例可以帮助开发者掌握如何构建高效、实时的富互联网应用程序,提升Web应用的用户体验。

    flex+blazeDS配置指南

    而BlazeDS是Adobe提供的一个免费服务器端组件,用于实现Flex与Java后端的数据通信。本文将深入探讨如何配置Flex与BlazeDS,让它们协同工作,实现高效、稳定的数据交换。 首先,我们需要准备必要的工具和环境。...

    Flex+BlazeDS+Spring+Hibernate

    Flex+BlazeDS+Spring+Hibernate 是一个经典的前端与后端集成方案,广泛应用于构建富互联网应用程序(Rich Internet Applications,RIA)。在这个框架组合中,Flex 作为用户界面层,提供了丰富的交互体验;BlazeDS ...

Global site tag (gtag.js) - Google Analytics