几种流行Webservice控制框架

 转会【http://blog.csdn.net/thunder4393/article/details/5787121】,写的非常好,以收藏。

1      摘要

开发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.


良好的扩展性。

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 {

String url = "http://localhost:8081/boss/services/Calculate";

// client初时化时间

long startTime = System.currentTimeMillis();

// clientstub代码各自是axis1/axis2/xfire/cxf框架 wsdl2java生成

CalculateCalculateHttpportStub stub = new CalculateCalculateHttpportStub(url);

long endTime = System.currentTimeMillis();

System.out.println("client init time is: " + (endTime - startTime));

// 连续调用10次

for (int i = 0; i < 10; i++) {

long startTime1 = System.currentTimeMillis();

String ret = stub.getVersion().get_return();

long endTime1 = System.currentTimeMillis();

System.out.println("[" + i + "] elapsed time is: " + (endTime1 - startTime1) + " ms");

System.out.println("stub.getVersion() is: " + ret);

}

}


服务端代码


public String getVersion()

注:接口无不论什么业务逻辑。仅仅返回一个字符串:"Hello";


測试方法


本机接口測试。client和服务端都在A測试机上进行;


远程接口測试,A測试机作为client,B測试机作为server。本次測试是在局域网内完毕。


结果精度


数字精确到小数点后两位


名词解释


server端:部署到server的程序。


client:发起请求调用server上webservcie的程序。


client初时化时间:发起接口调用时,初始化clientjava对象所需时间。

比如:CalculateCalculateHttpportStub stub = new CalculateCalculateHttpportStub(url); // 由框架 wsdl2java生成clientstub

表格 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


2569


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


2584


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


1138


1325


762.2


0


1340.6


2569


451.6


10次中的初次调用值


546.4


568.8


484.2


434.8


1022


987.4


281.4


225


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


25


4.467


7.333


远程測试结果(单位:ms)


client初始化


672.8


1040


axis1


772


0


2994


2584


421.6


10次中的初次调用值


645.8


606


684.4


427.8


1010


1190


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代码,这种合作可以实现更好的性能。在实际项目,当开发商选择详细的框架,然而,我们需要制定一个全面的组织评估框架、产品路线图、文件的程度、应用范围广、和优秀的集成框架、灵活性和可扩展性等因素的影响。

时间: 2024-10-23 19:23:40

几种流行Webservice控制框架的相关文章

几种流行Webservice框架性能对照

 转自[http://blog.csdn.net/thunder4393/article/details/5787121],写的非常好,以收藏. 1      摘要 开发webservice应用程序中离不开框架的支持,当open-open站点列举的就有30多种,这对于开发人员怎样选择带来一定的疑惑.性能Webservice的关键要素,不同的框架性能上存在较大差异,而当前在官方站点.网络资料中能够方便的找到各自框架的介绍,可是非常少有针对不同框架性能測试数据.本文选择了比較流行几个框架:Apach

几种流行Webservice框架性能对比

1摘要 开发webservice应用程序中离不开框架的支持,当open-open网站列举的就有很多种,这对于开发者如何选择带来一定的疑惑.性能Webservice的关键要素,不同的框架性能上存在较大差异,而当前在官方网站.网络资料中可以方便的找到各自框架的介绍,但是很少有针对不同框架性能测试数据.本文选择了比较流行几个框架: Apache Axis1.Apache Axis2.Codehaus XFire.Apache CXF.Apache Wink.Jboss  RESTEasy.sun JA

几种流行的AJAX框架对比:Jquery,Mootools,Dojo,ExtJs,Dwr

1:Jquery 主页:http://jquery.com/ 设计思想:简洁的方案思想,几乎所有操作都是以选择DOM元素(有强大的Selector)开始,然后是对其的操作(Chaining等特性). 优点: 文件小,压缩后代码只有20多k,无压缩代码94k.Selector和DOM操作的方便: jQuery的Selector与mootools的Element.Selectors.js比较,CSS Selector, XPath Selector(1.2后已删除)Chaining:总是返回一个jQ

静态网站及其生成、托管会成为一种流行趋势吗?

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:这个问题是我最近工作中,一直在思考的内容,今天和大家分享和讨论一下我的看法. 定义 静态网站:整个网站只由静态的内容(HTML\CSS\JS\Images-)组成,服务端发送给客户端的都是直接的内容,而不是通过动态网页技术(不管是ASP\JSP\PHP\Django\RoR\NodeJS)在收到请求的时候由服务端进行渲染出最终HTML发送给客户端. 静态网站生成器:基于动态内容生成静态网站的技

7种流行PHP集成开发工具(IDE)的比较

本文发掘集成开发环境(IDE)的所有用途,并比较 7 种流行的 IDE 的成本和优势. 编写关于 php 的系列文章让我更加深刻地了解了 PHP 开发人员的世界.我和许多 PHP程序员交谈过,最令我惊奇的是只有很少的人使用 IDE.大多数程序员使用文本编辑器,比如 Microsoft Windows 上的记事本.Emacs 或者 Vim. 我提到的这些文本编辑器(以及我没提到)都是很不错的 -- 我不想讨论哪个编辑器更好.但是,我要强调的是不使用文本编辑器会使您对 PHP 代码有更深的见解.几乎

Shiro权限控制框架入门1:Shiro的认证流程以及基本概念介绍

前言:我在最开始学习Shiro这个框架时,在网上搜索到的一个介绍比较全面的教程是:<跟我学Shiro>系列教程.但是在我看了他写的前几篇文章后,我发现虽然他在这个系列教程中把shiro的一些特性介绍地非常全面详细,但是整个教程的叙述方式还是有很大缺陷的.文章与文章之间并没有很好地串联起来,每篇文章介绍的东西都过于分散了,如果是对shiro完全不了解的新手来看的话完全是一场噩梦.就像一个网友评价的这样: 看了看这个教程,看完之后都想放弃shiro了,完全看不懂,后来百度了很多别的资料才理解了sh

流行python服务器框架

流行python服务器框架 1.tonardo---- 多并发.轻量级应用, “非阻塞”的web 容器.类似tomcat.这个大家太熟悉了,就不多说了. 2.Twisted---- Twisted 是一个Python 应用程序和库文件的集成套件.其中包括全套页面服务器应用程序和基于文本模式的游戏引擎.还有一些诸如对数据流进行处理的模块.是一个异步的网络开发框架,其中包含可以独立运行的服务器.类似tomcat. 3.django---- 一个web开发的框架.类似struts.admin功能号称是

spring mvc控制框架的流程及原理1: 总概及源码分析

主要介绍spring mvc控制框架的流程及原理 Spring Web MVC处理请求的流程 具体执行步骤如下: 首先用户发送请求————>前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分:图2-1中的1.2步骤: 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理:处理完毕后返回一个Model

目前js比较流行的js框架

使用流行框架的意义:运行快,效率高,其中最鲜明的特点是写得少,做得多:还为我们提供了丰富的插件. 下边这张表简述了js目前的流行框架的优点: AngularJ.js                                  由google开发,2009年首次发布 很流行的前端框架 使用Angular.js创建第一个UI,成本很低 对于团队来说,AngularJ.js有许多很棒的工具可用 很适合创建一个快速.混合型复杂的解决方案 比起React,更合适于创建小型企业级应用 由Google负