几种流行Webservice控制框架
转会【http://blog.csdn.net/thunder4393/article/details/5787121】,写的非常好,以收藏。
开发webservice应用程序中离不开框架的支持。当open-open站点列举的就有30多种,这对于开发人员怎样选择带来一定的疑惑。性能Webservice的关键要素。不同的框架性能上存在较大差异,而当前在官方站点、网络资料中能够方便的找到各自框架的介绍,可是非常少有针对不同框架性能測试数据。本文选择了比較流行几个框架:Apache Axis1、Apache Axis2、Codehaus XFire、Apache CXF等,採用java作为測试用例。通过本机和远程两种进行測试方式,对这几种框架进行了性能測试。并对測试结果分析和性能比較,最后并对性能优异的框架进行了推荐。
关键词:Axis1、Axis2、XFire、CXF、Spring、SOAP、StAX、WSDL
2 框架介绍
2.1 Apache Axis1
Axis本质上就是一个SOAP引擎(Apache Axis is an implementation of the SOAP),提供创建server端、client和网关SOAP操作的基本框架。
但Axis并不全然是一个SOAP引擎,它还包含:
l 是一个独立的SOAPserver。
l 是一个嵌入Servlet引擎(比如Tomcat)的server。
l 支持WSDL。
l 提供转化WSDL为Java类的工具。
l 提供样例程序。
l 提供TCP/IP数据包监视工具。
2.2 Apache Axis2
Apache Axis2相比Apache Axis1更加有效、更加模块化、更加面向xml。支持easy插件模块扩展新功能和特性,比如安全和可靠。
Apache Axis2是基于Apache AXIOM,它是一个高性能、pull-based XML对象模型。Apache Axis2的关键特性:
l 解析xml更快。採用自己的对象模型和StAX (Streaming API for XML)。
l 更低的内存占用。
l 支持热部署。
新服务增加到系统。无需重新启动服务。
l 支持异步 webservice、
l MEP支持。灵活支持在WSDL 2.0定义的Message Exchange Patterns (MEPs)
l 更加灵活。引擎给开发者提供了充足的自由度可扩展客户头信息处理、系统管理、
l 更加稳定性。
l 传输框架不依赖于详细协议。为集成和传输协议(SMTP, FTP, message-oriented middleware, etc)有一个简单和抽象,引擎核心是全然独立于详细的传输协议。
l 支持WSDL。
支持WSDL1.1、WSDL2.0。
l 方便集成其它组件(Add-ons)。
几个web services已经被集成,包含:WSS4J for security (Apache
Rampart), Sandesha for reliable messaging,Kandula which is an encapsulation of WS-Coordination,
WS-AtomicTransaction and WS-BusinessActivity.
l
良好的扩展性。
2.3 Codehaus XFire
XFire核心是一个轻量的基于STAX消息处理模型。用来与SOAP消息交互,它支持不同类型的绑定机制、容器和传输协议。
支持webservice标准- SOAP, WSDL, WS-I Basic Profile, WS-Addressing, WS-Security, etc.
l 高性能SOAP STACK
l 可插拔绑定POJOs, XMLBeans, JAXB 1.1, JAXB 2.0, and Castor support
l 通过Java1.5 和1.4(Commons attributes JSR 181 syntax)使用JSR 181 API配置服务
l 支持多中传输协议- HTTP, JMS, XMPP, In-JVM, etc.
l 可嵌入的和直观的API
l 支持Spring, Pico, Plexus, and Loom
l 支持JBI
l client和服务端stub代码生成
l 支持JAX-WS early access
2.4 Apache CXF
Apache CXF是一个开源服务框架。CXF可用前端编程APIs开发服务,比方:JAX-WS and JAX-RS,主要特性包含:
l 支持Web services标准。
包含:SOAP、the WSI Basic Profile、WSDL、WS-Addressing、WS-Policy、WS-ReliableMessaging、WS-Security、WS-SecureConversation 和WS-SecurityPolicy.
l 支持不同类型前端开发模型。CXF实现了JAX-WS APIs,支持JAX-RS开发。
l easy使用。
CXF设计的简洁和直观。具有简洁APIs迅速的构建基于代码的服务,Maven插件使得工具集成更加easy、JAX-WS API支持、Spring 2.x XML使得配置更加easy。
l 支持二进制和遗留协议。CXF被设计为可插拔的架构,在不同的传输协议结合下。不仅支持XML,也支持非XML类型绑定,比如:JSON和CORBA。
3 測试准备
表格 1測试基本元素
|
測试条件 |
描写叙述 |
|
主机环境 |
A測试机:CPU:1.60GHz;内存:1.37G |
|
B測试机:CPU:1.83GHz;内存:1G |
|
|
Web服务 |
axis1 1.3 |
|
axis2 1.2 |
|
|
xfire 1.2.6 |
|
|
应用环境 |
jdk 1.4、spring 2.x |
|
client代码 |
public void testgetVersion() throws java.lang.Exception { |
|
服务端代码 |
public String getVersion() |
|
測试方法 |
本机接口測试。client和服务端都在A測试机上进行; |
|
远程接口測试,A測试机作为client,B測试机作为server。本次測试是在局域网内完毕。 |
|
|
结果精度 |
数字精确到小数点后两位 |
|
名词解释 |
server端:部署到server的程序。 |
|
client:发起请求调用server上webservcie的程序。 |
|
|
client初时化时间:发起接口调用时,初始化clientjava对象所需时间。 |
|
表格 2在端对端性能上,一个client驱动程序使用了一个胖clientWeb服务堆栈来发送和接受SOAP请求 |
|
Webservice服务端 |
|
Webserviceclient Webservice stack |
|
SOAP over HTTP |
4 性能測试
4.1 測试方法
本次假定在同样网络、主机环境条件下进行測试,因此性能的区别主要是由不同框架实现机制的所决定。
l 採用两种方式測试:本机測试、远程測试。
l server端分别採用:axis1、axis2、xfire、CXF,对于选定的server端,用不同框架相应的工具包wsdl生成clientstub代码进行測试。
l 服务端接口内部没有复杂业务逻辑,client调用时。只返回一个字符串。
l 每次执行,採用java循环方式调用10次服务端接口,并记录下从发起到返回结果的时间。
4.2 測试结果
限于篇幅,本文仅提供了:以CXF框架为服务端的具体測试结果,及其各个框架的综合后測试结果。
表格 3以CXF作为服务端測试具体结果
|
本机測试结果(单位:ms) |
||||||||||||
|
server端 |
cxf |
|||||||||||
|
client |
cxf |
axis1 |
||||||||||
|
client初始化 |
第1组 |
第2组 |
第3组 |
第4组 |
第5组 |
|
第1组 |
第2组 |
第3组 |
第4组 |
第5组 |
|
|
|
2547 |
2594 |
2563 |
2578 |
2563 |
|
422 |
422 |
407 |
406 |
421 |
415.6 |
|
连续10次调用接口測试 |
第1组 |
第2组 |
第3组 |
第4组 |
第5组 |
|
第1组 |
第2组 |
第3组 |
第4组 |
第5组 |
|
|
1 |
297 |
281 |
281 |
282 |
266 |
281.4 |
234 |
219 |
219 |
234 |
219 |
225 |
|
2 |
0 |
0 |
0 |
15 |
15 |
|
0 |
16 |
0 |
0 |
16 |
|
|
3 |
0 |
16 |
16 |
0 |
0 |
|
16 |
15 |
16 |
16 |
0 |
|
|
4 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
15 |
|
|
5 |
16 |
0 |
0 |
0 |
0 |
|
15 |
16 |
15 |
0 |
0 |
|
|
6 |
0 |
15 |
15 |
0 |
16 |
|
0 |
0 |
0 |
16 |
0 |
|
|
7 |
0 |
0 |
0 |
0 |
0 |
|
16 |
16 |
16 |
0 |
16 |
|
|
8 |
15 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
15 |
0 |
|
|
9 |
0 |
0 |
0 |
0 |
15 |
|
16 |
15 |
16 |
0 |
16 |
|
|
10 |
0 |
16 |
16 |
15 |
0 |
|
0 |
0 |
0 |
16 |
0 |
|
|
10次平均值 |
32.8 |
32.8 |
32.8 |
31.2 |
31.2 |
32.16 |
29.7 |
29.7 |
28.2 |
29.7 |
28.2 |
29.61 |
|
后9次平均值 |
3.444 |
5.222 |
5.222 |
3.333 |
5.111 |
4.467 |
7 |
8.667 |
7 |
7 |
7 |
7.333 |
|
远程測试结果(单位:ms) |
||||||||||||
|
server端 |
cxf |
|||||||||||
|
client |
cxf |
axis1 |
||||||||||
|
client初始化 |
第1组 |
第2组 |
第3组 |
第4组 |
第5组 |
|
第1组 |
第2组 |
第3组 |
第4组 |
第5组 |
|
|
|
2703 |
2547 |
2578 |
2563 |
2531 |
|
406 |
406 |
422 |
407 |
422 |
412.6 |
|
连续10次调用接口測试 |
第1组 |
第2组 |
第3组 |
第4组 |
第5组 |
|
第1组 |
第2组 |
第3组 |
第4组 |
第5组 |
|
|
1 |
344 |
281 |
281 |
281 |
297 |
296.8 |
219 |
234 |
235 |
234 |
687 |
321.8 |
|
2 |
0 |
0 |
16 |
16 |
16 |
|
16 |
0 |
15 |
16 |
16 |
|
|
3 |
0 |
16 |
0 |
0 |
0 |
|
62 |
16 |
0 |
0 |
0 |
|
|
4 |
16 |
0 |
16 |
15 |
0 |
|
47 |
16 |
16 |
15 |
16 |
|
|
5 |
0 |
15 |
0 |
0 |
15 |
|
16 |
15 |
15 |
16 |
0 |
|
|
6 |
0 |
0 |
15 |
16 |
0 |
|
31 |
0 |
0 |
0 |
15 |
|
|
7 |
0 |
16 |
0 |
0 |
16 |
|
16 |
16 |
16 |
15 |
0 |
|
|
8 |
15 |
0 |
0 |
0 |
0 |
|
31 |
0 |
16 |
16 |
16 |
|
|
9 |
0 |
16 |
16 |
15 |
0 |
|
31 |
15 |
0 |
0 |
0 |
|
|
10 |
0 |
0 |
0 |
0 |
15 |
|
31 |
16 |
15 |
16 |
15 |
|
|
10次平均值 |
37.5 |
34.4 |
34.4 |
34.3 |
35.9 |
35.3 |
50 |
32.8 |
32.8 |
32.8 |
76.5 |
43.37 |
|
后9次平均值 |
3.444 |
7 |
7 |
6.889 |
6.889 |
6.244 |
31.22 |
10.44 |
10.33 |
10.44 |
8.667 |
14.22 |
表格 4不同框架本机和远程測试结果
|
本机測试结果(单位:ms) |
||||||||
|
server端 |
axis2 |
axis1 |
xfire |
cxf |
||||
|
client |
axis2 |
axis1 |
axis1 |
axis2 |
xfire+spring |
axis1 |
cxf |
axis1 |
|
client初始化 |
656.4 |
|
|
762.2 |
|
1340.6 |
|
451.6 |
|
10次中的初次调用值 |
546.4 |
568.8 |
484.2 |
434.8 |
|
987.4 |
281.4 |
|
|
10次平均值 |
62.48 |
66.7 |
73.44 |
57.22 |
119.2 |
120.9 |
32.16 |
29.61 |
|
后9次平均值 |
8.71 |
11.84 |
27.8 |
15.27 |
18.84 |
|
4.467 |
7.333 |
|
远程測试结果(单位:ms) |
||||||||
|
client初始化 |
672.8 |
|
axis1 |
|
|
|
|
421.6 |
|
10次中的初次调用值 |
645.8 |
|
684.4 |
427.8 |
|
|
296.8 |
321.8 |
|
10次平均值 |
71.58 |
70.36 |
97.82 |
60.28 |
117.2 |
139.1 |
35.3 |
43.37 |
|
后9次平均值 |
7.78 |
10.58 |
32.64 |
19.44 |
18.04 |
27.13 |
6.244 |
14.22 |
4.3 结果分析
从数据能够看出,有以下几个特点:
l client初次调用。初始化clientstub对象时,大约在:600ms~2500ms。
因为须要建立网络连接。初始化java相关对象,因此耗时较长。
l client初始化stub后,接口初次调用。大约在:400ms~1000ms。相比兴许的接口调用时间最长。
l 在第一次调用完成后,随后的调用中,性能都明显提升。大约在:7ms~30ms。
l 本机測试与远程測试,性能上差距非常微小。在快速的局域网内。性能区别差点儿能够忽略。
l 在同样的服务端下。採用不同框架生成的stub代码调用时,时间上也存在一定的差异。
实际应用中。接口的调用都是在网络的不同的机器之间进行,本文也重点关注远程调用測试结果,在測试结果比較上,能够看出:
l 最优组合是最差组合性能的5倍多。
n 最优的组合为:cxfclient+ cxf服务端。6ms左右。
n 最差的组合为:axis1client+ axis1服务端,32ms左右。
l CXF作为服务端,对于不同的client调用时,性能最佳。
5 结束语
本文对几种流行webservice框架的性能的实际測试,对开发人员选择框架时提供了一个关于性能方面參考。Apache CXF是Codehaus XFire 的第二代产品。眼下在不同框架中性能最佳,应该是开发人员不错的选择,这与它本身的架构设计不无关系。相比其它框架。CXF具有几个突出的特性:支持JAX-WS、Spring集成、Aegi数据绑定、支持RESTful services、支持WS-*、Apache协议、代码实现简洁。
Apache Axis2是Apache
Axis1的第二代产品。架构上也很不错,关键特性:支持各种规范、可插拔模块化设计、支持热部署等。与CXF相比性能也很优异。
在确定的框架场景服务端,最好是使用框架来生成client代码,这种合作可以实现更好的性能。在实际项目,当开发商选择详细的框架,然而,我们需要制定一个全面的组织评估框架、产品路线图、文件的程度、应用范围广、和优秀的集成框架、灵活性和可扩展性等因素的影响。
几种流行Webservice控制框架的更多相关文章
- 几种流行Webservice框架性能对照
转自[http://blog.csdn.net/thunder4393/article/details/5787121],写的非常好,以收藏. 1 摘要 开发webservice应用程序中 ...
- 几种流行Webservice框架性能对比
1 摘要 开发webservice应用程序中离不开框架的支持,当open-open网站列举的就有30多种,这对于开发者如何选择带来一定的疑惑.性能Webservice的关键要素,不同的框架性 ...
- 几种流行Webservice框架性能对比(转载)
1摘要 开发webservice应用程序中离不开框架的支持,当open-open网站列举的就有很多种,这对于开发者如何选择带来一定的疑惑.性能Webservice的关键要素,不同的框架性能上存在较大差 ...
- 几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比
AJAX是web2.0的基石,现在网上流行几种开源的AJAX框架,比如:jQuery,Mootools,Dojo,Ext JS等等,那么我们到底在什么情况下该使用那个框架? 让我们来想想选择AJAX框 ...
- 几种流行Webservice框架
一. 几个比较流行的Webservice框架: Apache Axis1.Apache Axis2.Codehaus XFire.Apache CXF.Apache Wink.Jboss RESTE ...
- WebService—规范介绍和几种实现WebService的框架介绍
一.关于SOA(面向服务架构)思想 1.关于协议 2.SOA 的诞生 SOA(Service-Oriented Architecture)面向服务架构是一种思想,它将应用程序的不同功能单元通过 ...
- 几种流行的AJAX框架对比:Jquery,Mootools,Dojo,ExtJs,Dwr
1:Jquery 主页:http://jquery.com/ 设计思想:简洁的方案思想,几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性). ...
- 几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较
几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较 来源 XFire VS Axis XFire是与Axis2 并列的新一代WebService平台.之所 ...
- 流行python服务器框架
流行python服务器框架 1.tonardo---- 多并发.轻量级应用, “非阻塞”的web 容器.类似tomcat.这个大家太熟悉了,就不多说了. 2.Twisted---- Twisted ...
随机推荐
- EJBCA 在windows上的安装
为了做EJBCA的封装測试,在我自己电脑上装了个,可是在国内的开发上面的介绍实在是太少.有的也仅仅是些傻瓜式的安装介绍,这是介绍在Windows上安装的过程,(后面介绍下 linux 红帽上的),有些 ...
- YUV格式具体解释
YUV是指亮度參量和色度參量分开表示的像素格式,而这样分开的优点就是不但能够避免相互干扰,还能够减少色度的採样率而不会对图像质量影响太大.YUV是一个比較笼统地说法,针对它的详细排列方式,能够分为非常 ...
- cocos项目导入其它源文件时加入依赖库时,头文件提示找不到文件夹中的文件
cocos项目导入其它源文件时加入依赖库时,头文件提示找不到文件夹中的文件解决方法: 选择项目属性->c/c++->常规,在附加包括项目中加上对应的文件夹 cocos test项目的库(所 ...
- Codeforce 143B - Help Kingdom of Far Far Away 2
B. Help Kingdom of Far Far Away 2 time limit per test 2 seconds memory limit per test 256 megabytes ...
- HelloGithub
<HelloGithub月刊>第一期 <HelloGithub月刊> 因为现在这个项目只有我自己做,只敢叫“月刊”,希望有志同道合者,快点加入到这个项目中来!同时,如果您有 ...
- 理解 Python 中的线程
原地址:http://blog.jobbole.com/52060/ 本文由 伯乐在线 - acmerfight 翻译自 Akshar Raaj.欢迎加入技术翻译小组.转载请参见文章末尾处的要求. 我 ...
- 【ArcGIS 10.2新特性】ArcGIS 10.2 for Server新特性
ArcGIS forServer相关的很多重大消息,如与Portal for ArcGIS进行了集成,提供对实时数据支持.离线地图使用. 1.与Portal for ArcGIS集成 用户能够配置Po ...
- 找呀志_通过开源框架引AsyncHttpClient上传文件
一个.步骤: 1.加入权限(接入网络和可写) 2.获取上传文件的路径和推断是空的 3.如果为空.创建一个异步请求对象 4.创建上传文件路径 5.跑post请求(指定url路径.封装上传參数.新建Asy ...
- 浅析ArrayList,LinkedList的执行效率
以前见过很多文章说这两个东西,感觉自己还是没有深入理解,今天看了书明白一些,在此提出来和大家共同探讨: 面试的时候(基础)一般会问你使用过LinkedList或者ArrayList没有,简单的回答有或 ...
- HDU - 1588 Gauss Fibonacci (矩阵高速幂+二分求等比数列和)
Description Without expecting, Angel replied quickly.She says: "I'v heard that you'r a very cle ...