写点什么

Adobe Flex 应用在 RPC 上的更多选择:AMF、BlazeDS 和 GraniteDS

  • 2007-12-20
  • 本文字数:1970 字

    阅读完需:约 6 分钟

上周,Adobe 宣布对 Adobe Flex 平台作了大改动,大量的生命周期数据服务(LiveCycle Data Services)在BlazeDS 项目中被开源,开源内容还包括AMF 的规格说明和代码。对于那些正在考虑采用Flex 平台的人来说,这次改动应该清除了最终的成本和许可障碍。

Adobe Flex 应用程序部署并运行在 Flash Player 中,其后台逻辑通过 RPC 访问,以一种类似于客户 / 服务器的构架方式。Flex 中有很多不同的 RPC 选项,包括 Web Services、HTTP 和 AMF/Data Services。AMF 是一个二进制协议,比传统的 RPC 方法具有更多的优点。Adobe 的 James Ward 在他的 Blog 文章“BlazeBench: Why you want AMF and BlazeDS”中着重提到了它在性能和带宽上的优点。

Adobe 的 Ted Patrick 在他的文章“The ABC’s of AMF”中详细描述了 AMF 的基本概念,并概括列出了下列几个优点:

1. 文件大小 —— AMF 对象非常小且使用 zlib 压缩。2. 快速序列化 / 反序列化 —— AMF 在 player 中使用本地 C 代码转化,因而运行非常之快。AMF 格式本身就被设计为在低内存和慢 CPU 条件下依然能够快速序列化和反序列化。由于 AMF 数据直接被解析为对象,没有审核解释或解析 AMF 的延迟,对象的创建可一次完成。

3. 本地类型和自定义类的支持 —— 除了 displayObjects,你可以序列化 Flash Player 中的任何对象。在反序列的时候如果自定义类在 Flash Player 中,你也可以将先前序列化的对象映射回自定义类实例。

在 Adobe 宣布 AMF 和 BlazeDS 开源之前,开发人员确实也有一些开源工具可选择来使用 AMF 协议,这些工具由一些团体采用反向工程而得。这些开源项目包括 RubyAMF AMFPHP SabreAMF OpenAMF Granite Data Services(GraniteDS)。拥有一个公开发布的 AMF 规格说明应该只会帮助改善这些实现。Ruby 和 PHP 项目仍将首选在应用程序中使用这些技术以利用 AMF,就如 BlazeDS 是 Java 应用程序在远程访问和消息传递方面是首选。 到目前为止,对于 Java 开发人员来说,GraniteDS 是应用 AMF 协议的首选开源工具。当 BlazeDS 在周二宣布的时候,GraniteDS 的创建者 Franck Wolff 显得有点手足无措,并对 GraniteDS 的未来持有怀疑。他通过 GraniteDS 邮件列表向大家发表了他对于 BlazeDS 的看法:

大家好: 恩……这是一个好消息(尽管我对此感觉还是有点怪)!

对 GDS 来说,唯一可能的将来是为 BlazeDS 遗漏的性能提供一些代码(我主要考虑的是透明外化(transparent externalization)、延迟加载(lazy-loading)的支持、代码生成)……

目前,我想我会停止任何 GDS 进一步的开发……欢迎大家做自由评论。

此致

Franck

在深思之后, Wolff 确实看到了 GraniteDS 的未来发展方向。在一个开源项目运作的样例中,他认为有很多新特性可以贡献给 BlazeDS 项目,或者可以继续独发展 GrainteDS 项目。 > 大家好(这是我的一些新的想法):

  1. 一点点历史回顾: GDS 创立的起因是由于 FDS 太过昂贵,而且更重要的是,它并不与众所周知的持久性 API(EJB3/Hibernate)集成,也不提供任何延迟加载机制。这也是为什么从最初我就创建了这个透明外化(transparent externalization)的特性(特别是 HibernateExternalizer)来进行序列化并保持所有持久的相关 bean 的域(比如 id,version 等)私有。后来,为了避免令人厌烦的手工编写可外部化(Externalizable )AS3 bean 的工作,gas3(GDS 代码生成器)应运而生。
  2. BlazeDS 和 GDS 的比较:令人感到惊奇的是,从严格的远程访问的观点来看,BlazeDS 恰恰是 GDS 一直以来想要实现的方向:使用 RemoteObjects 的经典的 AMF3 远程访问,一个新的基于 Comet 的信道用于在生产者和消费者之间通过 HTTP(非 RTMP)交换 AMF3 对象。另一方面,从持久性的观点来看,BlazeDS 不包含任何数据管理的特性,所以 GDS 可以补充很多非常重要的但 BlazeDS 缺少的特性:EJB3 持久性和延迟加载的支持。
  3. 一点点策略:BlazeDS(LGPL3,含源码)的第一个发布版本预告期为 2008 年初(没有精确的日期……),对于我们来说最好的策略是尽快发布 GDS1.0(在一月底之前),然后共同等待 BlazeDS 公开他们的源码。再然后,我们或者可以拷贝 / 粘贴一些 BlazeDS 的好的代码到 GDS(同一个 license!)中, 或者将外化+延迟加载机制+gas3 添加到 BlazeDS 的特性中去(如果 Adobe 同意的话),或是甚至将 GDS 作为 BlazeDS 的一个插件发布(不知道有没有这个可能性)。非常欢迎发表任何看法!

Cheers,
Franck.

GraniteDS 对集成了 Java 的 Flex 应用程序确实有一些很优秀的特性和优点。另外,BlazeDS 也不仅仅是一个 AMF 规格说明的实现,它提供了一些 GraniteDS 没有的特性,如 push、消息传递。抛开实现不说,很明显,Adobe 向 Flex 平台开源的迈进,对于 Flex 开发人员是百益无害。 查看英文原文: More on RPC in Adobe Flex Applications with AMF, BlazeDS, and/or GraniteDS

2007-12-20 00:562539
用户头像

发布了 71 篇内容, 共 20.1 次阅读, 收获喜欢 3 次。

关注

评论

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

基于Guava API实现异步通知和事件回调

Tom弹架构

Java 架构 设计模式

盲盒小程序开发盲盒源码搭建

盲盒开发一番赏盲芒趣蛋趣小程序app开发

社科院专家认为元宇宙是双刃剑,将带来五大巨变

CECBC

单机训练6000万类视觉分类模型,飞桨大规模分类库PLSC做到了

百度开发者中心

飞桨 视觉分类 plsc

【强势推出】专家带你玩,秒懂数据库!官方证书、万元奖品带回家!

华为云数据库小助手

GaussDB GaussDB(for openGauss) 华为云数据库

盲盒开发小程序app开发源码搭建

公司应该监控员工的上网行为吗?

石云升

职场经验 11月日更

选择 Pulsar 而不是 Kafka 的 7 大理由

Apache Pulsar

kafka 架构 云原生 中间件 Apache Pulsar

如何在浏览器 console 控制台中播放视频?

CRMEB

怎么自学Python,大概要多久?

老表

Python 11月日更 编程入门 思路 如何解决问题

盲盒开发

Flink CDC 2.1 正式发布,稳定性大幅提升,新增 Oracle,MongoDB 支持

Apache Flink

大数据 flink 后端 实时计算 CDC

如何用Camtasia为“微课”视频添加光标效果?

淋雨

Camtasia

ARP欺骗与防范

喀拉峻

网络安全 安全 信息安全

盲盒开发源码搭建小程序app

初识 .NET6

面向对象的猫

.net core .net6

盲盒app开发

17 K8S之容器资源需求与资源限制

穿过生命散发芬芳

k8s 11月日更

盲盒开发盲盒app开发

进击的Java(九)

ES_her0

11月日更

自定义View:多点触摸画笔的实现

Changing Lin

11月日更

以用户体验为抓手,助力券商数字化转型

博睿数据

盲盒小程序开发源码搭建

Python Qt GUI设计:多线程中信号与槽的使用(基础篇—9)

不脱发的程序猿

Python qt PyQt GUI设计 多线程中信号与槽的使用

支撑长安链运行,区块链算力平台是什么?

CECBC

盲盒开发盲盒小程序开发

Android C++系列:Linux文件IO操作(一)

轻口味

c++ android jni 11月日更

.NET6 内置IOC容器

面向对象的猫

.net core .net6

盲盒开发盲盒小程序系统开发

盲盒h5小程序app系统开发

Adobe Flex应用在RPC上的更多选择:AMF、BlazeDS和GraniteDS_Java_Jon Rose_InfoQ精选文章