Java语言支持,java通讯方式和协议
如何解决写爬虫IP受阻的问题?立即使用。
分享以下java语言常用的通信协议以及协议性能的比较。
1.RMI
RMI调用和预期的一样,RMI当然是最快的,几乎在所有情况下,它的毫小时是最少的。尤其是在数据结构复杂、数据量大的情况下,与其他协议的差距尤为明显。为了充分发挥RMI的性能,又制作了一个测试类。不使用Spring,而是使用原有的RMI形式(继承UnicastRemoteObject对象)来提供服务并远程调用,效率对比Spring的用POJO包装的RMI。结果显示两者基本相同,Spring提供的服务稍快。最初认为这是因为Spring的代理和缓存机制比较强,节省了对象重新获取的时间。
2.Hessian
Hessian调用的是caucho公司的resin服务器,号称是最快的服务器,在java领域有一定知名度。Hessian作为树脂的一部分,它的设计也是非常简单高效的,实际操作也证明了这一点。Hessian平均比RMI慢20%左右,但这只有在数据量极大,数据结构复杂的情况下才能体现出来。在数据中等或小的情况下,Hessian并不比RMI慢。Hessian的优点是简单高效,可以跨语言使用。而且协议规范是开放的,我们可以为任何语言开发其协议的实现。目前现有的语言有:java,c,net,python,ruby。目前还没有delphi实现。此外,Hessian与WEB服务器集成得很好。借助WEB服务器的功能,它在处理大量用户并发访问时会有很大的优势。成熟的WEB服务器可以保证资源分配、线程排队、异常处理等方面。RMI本身不提供多线程服务器。而且,RMI需要打开防火墙端口,而Hessian不需要。
3.Burlap
Burlap和Hessian都是caucho公司的开源产品,只不过Hessian采用二进制格式,而Burlap采用xml格式。测试结果表明,在数据结构不复杂、数据量适中的情况下,Burlap的效率尚可,但如果数据量较大,效率会急剧下降。平均来说,Burlap的通话时间是RMI的三倍。在我看来,其效率低下有两个原因。一个是XML数据的描述太多,同样的数据结构需要多得多的传输。另一方面,众所周知,解析xml是资源密集型的,尤其是在数据量很大的情况下。
4.HttpInvoker
HttpInvoker是SpringFramework提供的java远程调用方法,使用JAVA序列化机制来处理对象的传输。从测试结果来看,它的效率还是可以接受的,和RMI基本持平。但是只能用于JAVA语言之间的通信,客户端和服务器端都需要使用SPRING框架。另外,HttpInvoker还没有经过实际测试,也没有发现有项目应用这个协议。
5.web service
本次测试选择apache的AXIS组件作为WEB服务的实现,AXIS在WEB服务领域已经比较成熟和确立。为了测试数据传输和编解码的时间,客户端和服务器端都使用缓存,对象只需要实例化一次。然而,测试结果表明,web服务的效率仍然比其他通信协议慢10倍。如果考虑到对同一对象的多个引用的传输,web服务将会进一步落后。因为RMI、Hessian和其他协议可以传输引用,而且一个web服务有多少引用,就有必要复制多少对象实体。web服务传递的冗余信息太多是其速度慢的原因之一。监控显示,同样的访问请求,描述同样的数据,Web service返回的数据量是hessian协议的6.5倍。此外,WEB服务的处理也非常慢,当前的xml解析器普遍效率低下,处理xml-bean的资源非常少。从测试结果来看,远程调用比本地调用更快,从侧面说明主要用于xml文件的编码和解码。这比冗余信息更严重,冗余信息只占用网络带宽,每次调用的资源消耗直接影响服务器的负载能力。(MS的工程师曾经说过,WEB SERVICE不能加载超过100个并发用户。在测试过程中还发现,web服务编码不方便,为非基本类型逐个注册序列化和反序列化类比较麻烦。生成存根比较累,不如spring RMI/hessian流畅简洁。而且web service不支持集合类型,只能使用数组,不方便。这就是java语言支持的协议的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。