在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

用 Flex Builder 构建即时聊天应用

  • 2009-09-01
  • 本文字数:1465 字

    阅读完需:约 5 分钟

Activa Live Chat 是一个基于 Adobe Flex 的即时在线聊天应用,它可以让网站的所有者通过即时的基于文本的聊天来轻松地为访问者和客户提供实时在线的支持。它为网站的访问者和聊天人提供了基于 Flex 的 UI 风格,而在后端的聊天服务则是由 PHP 实现。

本文会讲解如何使用 Adobe Flex 和 Adobe Blaze DS 来构建这样一个聊天应用程序。

Flex 通过开源的 BlazeDS 消息服务来支持订阅及发布消息。这个消息服务管理着一些 Flex 客户端可以订阅或发布的目标地址。Flex 提供了 Producer 和 Consumer 这两个组件,让你用来向目标地址发送或订阅消息。如果要订阅消息,你就使用 Consumer 类的 subscribe()方法。当有消息发送到你订阅了的目标地址时,Consumer 上就会触发 message 事件。

使用 BlazeDS 的发布 / 订阅功能是很简单的。下面是一个简单的聊天应用的例子:

复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"                        
        creationComplete="consumer.subscribe()">
        <mx: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; 
                    producer.send(message);  
                    msg.text = "";  
                }
                private function messageHandler(message:IMessage):void  
                {
                    log.text += message.body.chatMessage + "\n";
                }
            ]]>
        </mx:Script>  
        <mx:Producer id="producer" destination="chat"/>
        <mx:Consumer id="consumer" destination="chat"    
            message="messageHandler(event.message)"/> 
        <mx:Panel title="Chat" width="100%" height="100%"> 
            <mx:TextArea id="log" width="100%" height="100%"/> 
            <mx:ControlBar>
                <mx:TextInput id="msg" width="100%" enter="send()"/>
                <mx:Button label="Send" click="send()"/>
            </mx:ControlBar> 
        </mx:Panel> 
    </mx:Application>

消息传递的目的地址是在你的 Flex 应用根下一个叫 messaging-config.xml 中配置的。一个目的地址配置的关键元素是在客户端和服务器交换数据的通道。使用 BlazeDS,消息传递的目的地址通常使用流通道或者轮询通道。

  • 使用流通道,服务器响应会一直保持开放状态,直到通道连接关闭,这样可以让服务器持续向客户端发送变化的数据。HTTP 连接并不是双向的。这意味着一个流 AMF 或者 HTTP 通道实际上需要两个浏览器 HTTP 连接来完成两个方向上的数据发送。一个用于从服务器向客户端发送流响应,另外一个暂态的连接用在当有 数据需要发送到服务器时,从浏览器池中拖拽数据。这个暂态的连接会立即释放回浏览器的连接池中。
  • 如果数据没有立刻准备好(长轮询),就可以通过一个简单的时间间隔或者服务器等待时间来配置轮询通道。无论哪种方式,轮询响应都会完成请求。浏览器 HTTP1.1 连接缺省是持久的,因此浏览器有可能会重复利用已有的 HTTP 连接来发送接下来的轮询请求,这样就能减少轮询带来的网络负载。

请参考 Flex 开发者中心来获取更多关于 Adobe Flex 的入门及深度文章。

2009-09-01 21:007434
用户头像

发布了 127 篇内容, 共 49.6 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

CSS架构之Theme层

Augus

CSS 11月日更

把选择题变成问答题

FunTester

Java Python 测试 FunTester

一部亚马逊4.5高分的领域经典,首次落地中国

博文视点Broadview

linux之我常用的20条命令(之二)

入门小站

Linux

在线文本纵向排版工具

入门小站

工具

基于消息队列 RocketMQ 的大型分布式应用上云最佳实践

阿里巴巴云原生

阿里云 RocketMQ 云原生 消息队列 上云

让华为举步维艰,Android曾距离成为国产系统仅一步之遥!

Jackpop

工厂模式——猫粮公司的演进

蝉沐风

Java 设计模式 工厂模式 工厂方法模式

【设计模式】第十篇 - 外观模式 - 我来组成头部

Brave

设计模式 外观模式 11月日更

尝鲜Windows 11一个月,被这3项巨变圈粉了....

Jackpop

iOS开发:用XIB拖控件关联时报错:“Could not insert new outlet connection…”解决方法

三掌柜

11月日更

实验室lims系统解决方案

低代码小观

实验室管理系统 企业管理 LIMS实验室信息管理系统 LIMS系统 信息管理系统

Android端信号处理总结

轻口味

android 音视频 11月日更

第三期3天AI进阶实战营-Day1任务卡

IT蜗壳-Tango

11月日更

[ 工程师书单推荐] - 年轻人,你渴望力量吗?

baiyutang

11月日更

算法入门-插入排序

ES_her0

11月日更

【Flutter 专题】19 图解【分享页面】底部对话框

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

架构实战营毕业总结

宁静志远

Apache APISIX 在腾讯云智能钛平台中的落地实践

API7.ai 技术团队

腾讯云 网关 API网关 Apache APISIX

【LeetCode】有效的完全平方数Java题解

Albert

算法 LeetCode 11月日更

架构训练营毕业总结

Clarke

架构实战营

苏丹2021年10月25政变断网事件

郑州埃文科技

Redis 日志篇:AOF 与 RDB 让数据持久化不丢失

码哥字节

redis 后端 Redis 核心技术与实战 11月日更

新书 | 这绝对是读起来最有趣的计算机科普绘本

图灵教育

少儿编程 绘本 逻辑启蒙

毕业总结

Geek_ywh40v

如何免费下载学术文献?

Jackpop

Apache RocketMQ 荣获 2021 中国开源云联盟优秀开源项目

阿里巴巴云原生

Apache 开源 RocketMQ 资讯

架构实战营 王者荣耀商城异地多活架构设计

💤 ZZzz💤

架构实战营

架构实战营 - 模块七作业

en

#架构实战营

系统架构面临的三大挑战,看 Kubernetes 监控如何解决?

阿里巴巴云原生

阿里云 Kubernetes 云原生 系统架构

Python代码阅读(第52篇):返回列表的头部和尾部

Felix

Python List Code 列表 阅读代码

用Flex Builder构建即时聊天应用_Java_张凯峰_InfoQ精选文章