F nil nil false true Fixnum Integer String String
Property of BOCOO Online (Beijing) Ltd
Array MixexArray Object Custom Class 举例说明:
Array Hash Hash Ruby Class
Hash Ruby Class
Object Custom Class
现在 ROR 后端有 User 对象,其对象属性结构如下表所示。 User 类结构 Id Name Sex Is_admin Desc Birthday Created_at Updated_at 假设现在后台发送这样一个数据结构给 Flex,结构的最外层为一个 hash,有 两个元素。第一个元素 Key 为
arr,值为一个 ruby 数组,数组中有一个 User 对 象。第二个元素 key 为 num ,值为 1。具体的结构已 ruby 语言表示如下: O = {:arr => [
], :num = > 1 }
Confidential Information 7
Property of BOCOO Online (Beijing) Ltd
在 Flex 收到的结构如下图所示:
图中表示,ROR 发送来的 Hash 类型被装换成了一个 Flex 的 Object 对象 (Object @46dc3a1),给 Object 有两个属性 arr 和 num。其中 arr 属性的值唯一个 Array,在这个数组中只有一个 Object 对象,即为 ROR 发送的 User 对象。另一个 属性 num 的值为 1,表示接受 User 对象的个数。Flex 可以依次层次关系取到相应 的值。
Confidential Information 8
Property of BOCOO Online (Beijing) Ltd
第三章 交互性能分析
本节讲述 Felx 与 ROR 通行过程中交互性能,主要传输的对象还是以上一章中 的 User 对象为例。测试方法为:由 Flex 发送不同的请求,在发送请求前纪录下开 始时间。在 ROR 接到请求后,组织好数据,通过 AMF 发送给 Flex。Flex 接受到 数据后,同时纪录结束时间。比较开始时间和结束时间的差值 dt。这个时间的差 值包括如下的几个阶段:1、Flex 发送请求阶段 2、ROR 组织数据阶段 3、AMF 转 换并发送数据 4、Flex 接受数据。其中最耗时的为第 2、3 阶段。 下面有传输不同对象数目时候 2、3 阶段各消耗的时间。 测试顺序 对象数 1 2 3 4 10 100 1000 10000 ROR 组织数据时间 30 ms 96 ms 219 ms 1820 ms AMF 转换发送时间 365 ms 384 ms 661 ms 2900 ms 单个对象传输时间 33.5 ms 2.88 ms 0.442 ms 0.108 ms
由以上的测试数据可以明显的看出,在数据量成 10 倍增加的时候,ROR 处理 数据和消耗在网络传输上的事件没有成相同倍数的增加。同时单个对象的传输时间 明显的下降。可以得出当数据量越大的时候单个对象的传输事件越小(在一定的范 围内)。是因为 AMF 采用二进制传输数据,在数据量大的时候可以尽量的压缩数 据。 测试只测试到 10000 个对象的传输,这已经是一次请求和响应中发送数据量的 极限了。大部分数据量都在 500 对象一下,如果再大都采用别的方法来代替。如分 页显示等手段来减小但是请求的数据量。 最后这里有一个不得不提的一个问题,就是这里的 ROR 组织数据的时间可能 和实际的情况有很大的差别。在测试的时候没有采用数据库,而是直接由 Ruby 生 成的对象。在实际应用中还要考虑到查询数据库的时间,这也将是一个重点考虑的 项目。
Confidential Information 9
Property of BOCOO Online (Beijing) Ltd
第四章 总结
在
Flex 和 ROR 交互过程中,采用 AMF 协议比采用文本传输的 xml 效率要高 很多。但是同样存在弊端,xml 文本信息可以一目了然的看到数据中的错误。但是 AMF 的二进制流就不是那么容易了。也就是采用此方法在调试过程中可能不是很 方便。好在可也通过其它的方法缓解这些不变,如可视化的接口调试器。 同时采用 RubyAMF 插件来交互可以很方便的生成数据。代码简洁、结构清 晰、开发效率高。 最后,采用 AMF 协议开发,一定要有一个详细的接口调用文档。详细到每一 个参数的含义和用法。因为它是知道 Flex 和 Ruby 开发人员开发的蓝本。
Confidential Information 10
Property of BOCOO Online (Beijing) Ltd