1 / 15
文档名称:

提高-Web-Service-数据传输效率的基本方法.docx

格式:docx   大小:82KB   页数:15页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

提高-Web-Service-数据传输效率的基本方法.docx

上传人:薇薇安 2022/1/17 文件大小:82 KB

下载得到文件列表

提高-Web-Service-数据传输效率的基本方法.docx

文档介绍

文档介绍:1 / 15
提高 Web Service 数据传输效率的基本方法
如何提高 Web Service 的数据传输效率及其应用场景
王 云 (), 软件工程师, IBM 中国研发中心
简介: 本文介绍了在 Web Servic明。一般来讲,系统请求 XML 的体积相对较小,没有必要使用压缩和解压缩的方法处理请求 XML。而对于系统响应 XML 来讲,一般都包含大量的数据,导致其体积庞大,需要进行压缩处理。对响应 XML 进行压缩的流程如下:ﻫ服务器端数据模型-->序列化操作-->利用 gzip 方式对序列化后的 XML 进行压缩-->返回到客户端-->以 gzip 方式进行解压缩-->对解压缩后的 XML 进行反序列化操作-->客户端数据模型ﻫ这里需要说明的一点是,客户端以及服务器端的数据模型需要实现 Serializable 接口。 ﻫ清单 2. gzip 方式压缩部分实现代码示例(java 实现)
        
import java.io.*;
import java..*;
public class Compress

ﻩpublic String gzip(OutputStream pStream)
ﻩ{
ﻩ   …
ﻩﻩtry
ﻩﻩ{ﻩﻩ
ﻩﻩﻩGZIPOutputStream stream = new GZIPOutputStream(pStream);
ﻩﻩﻩreturn ();
ﻩﻩ}catch(IOException e){…}
ﻩﻩ…
ﻩﻩreturn null;
ﻩ}


在程序将对象模型序列化成 XML 之前,可以使用上面的压缩方法,对数据流进行压缩。部分代码如下: ﻫ清单 3. 对象模型序列化后再进行压缩的实现代码示例
         
public class XMLSerializerHelper
{

ﻩpublic static String saveOBJtoString(Object inputOBJ) throws ConverException
5 / 15
ﻩ{
ﻩﻩ……
ﻩ ByteArrayOutputStream outputStream = null;
ﻩ try{
ﻩ ﻩoutputStream = new ();
((IXMLSerializable) inputObject, outputStream);
ﻩﻩﻩreturn Compress.gzip(outputStream);
ﻩﻩ}catch(Exception e){…}
ﻩﻩ……
ﻩ}


解压缩的过程也类似于上述代码。测试表明,采用 gzip 压缩可以减少60%以上的网络所带来的消耗。
2. 对于特定的数据进行特殊的处理ﻫ在企业日常的数据传输中,往往大量的数据具有很多共同的特点。数据和数据之间往往具有很多相同的地方,或者说,具有很多重复的地方。例如,在一个以 Web Service 为构架的报表处理系统中,报表往往会含有很多的空数据,或者相同属性和值域的数据,对于这样的情况,可以在代码中对特殊情况进行特殊的处理。我们同样以传输一个表格作为例子,如下:
ﻫ表 2. 将要传输的含有多个空值的表格示例
Software sold
Hardware sold
System sold
Others
120


-
-
-
90
-
-
110
-
-
可以看到,上述表格具有很多的空值,那么在 XML 中完全可以把空值的部分统一处理,这样就能大大减少网络传输的数量,其对应的部分 XML 如下: ﻫ清单 4. 对空值进行处理后的简化 XML 示例
           
……
<NULL Value>(1,2),(1,3),(1,4),(2,1),(2,2),(2,4)(3,1),(3,3),(3,4)</NULL Value>
……
优点:
对于重复性的数据来说,该方法可以几十倍甚至上百倍的减少传输的数据量(这取决于数据重复的数量大小),相对于第一种压缩方式
5 / 15
,由于只是对固定形式的数据进行处理,所以不会占用很大的 CPU 以及内存。ﻫ缺点:ﻫ数据的特点不容易把握,能够处理的情况比较简单和单一。对于空值或者某些值重复较多的情况,可以采用本方法。
解决方案二: 减少多次调用,尽量使用一次性的调用方式。
传统的 RP