您的位置:首页 > 其它

Hprose 是轻量级跨语言跨平台的面向对象的高性能远程动态通讯中间件

2014-12-08 14:39 239 查看
High Performance Remote Object Service Engine:
一个MIT开源许可的新型轻量级跨语言跨平台的面向对象的高性能远程动态通讯中间件
hprose 是一个新的远程过程调用协议,你可以认为它是 PHPRPC 的商业版本,但是它跟 PHPRPC 完全不同,hprose 协议是全新设计的,比 PHPRPC 更加高效,实现也完全是全部从头开始的,比 PHPRPC 更加易用。下面的附件是它们在 java 中的序列化、反序列化效率的比较。hprose 不仅仅是序列化本身效率提高,在通讯传输上也更加高效,而且反序列化数据一步到位,无需类型转换,因此,实际应用的效率要比 PHPRPC 还要高的多。

hprose编辑

本词条缺少概述信息栏名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧!

目录

1松散耦合的服务发布
2同步调用和异步调用
3异常处理
4多线程与线程安全
5性能与稳定性
6类型映射
7弱类型与动态性
8安全与身份认证
9负载均衡
10事务
Hprose (High Performance Remote Object Service Engine) 是一个MIT开源许可的新型轻量级跨语言跨平台的面向对象的高性能远程动态通讯中间件。它支持众多语言,例如nodeJs, C++, .NET, Java, Delphi, Objective-C, ActionScript, JavaScript, ASP,PHP, Python, Ruby, Perl 等语言,通过 Hprose 可以在这些语言之间实现方便且高效的互通。
Hprose 易学易用,且功能强大,您只需很短时间的学习,就可以用它方便地构建出跨语言跨平台分布式的电信级应用系统。

1松散耦合的服务发布编辑

大部分远程调用技术所发布的服务都需要单独编写,常见的服务编写方式有以下几种:
中间语言编写接口,然后生成服务器端构架代码,然后在构架代码中填写服务代码。例如:Corba、Ice 都是采用这种中间语言方式。通过继承某个远程对象类来实现服务类。例如:.NET Remoting。通过先编写远程调用接口,再实现远程调用接口来实现服务类。例如:.NET Remoting,RMI。通过语言的某种特性来标示服务方法。例如:WCF。以上这些方式都紧密耦合方式。由于这些方式都有条件限制,你不可能将一个已有的本地函数、方法、对象或类直接发布为远程服务。 而 Hprose 所发布的服务不需要单独编写,一个已有的本地函数、方法、对象或类可以通过 Hprose 直接发布为远程服务,而不需要对它们进行任何改动,甚至连某些语言内置的函数和方法都可以直接发布为服务。因此这不但方便了新的服务编写,而且对已有系统的改造也变的非常方便。

2同步调用和异步调用编辑

Hprose 既支持同步调用,也支持异步调用。其同步调用方式与调用本地方法的形式几乎完全一致。异步调用方式采用回调形式来处理结果,用法相当简单直观。其用法与其它远程调用技术相比,既容易掌握,也容易使用。

3异常处理编辑

Hprose 不论是在服务器端还是在客户端都具有完善的异常处理机制。
在服务器端,默认情况下,服务器端发生的异常将会被包装后发送到客户端,在服务器端不做错误日志记录,这有效的提高了服务器端的处理效率。但如果需要记录错误日志,只要在服务器端挂载一个错误处理事件,即可用任何您喜欢的方式来记录错误日志,有效的提高了服务器端处理错误日志的灵活性。服务器端还可以设置为 debug 模式,这种模式下,服务器端发生异常后,会将详细的错误信息包装后发送给客户端,在服务开发阶段非常有用。
客户端,当进行同步调用时,服务器端发生的异常(或客户端在调用时发生的网络异常)会在客户端直接抛出,通过各种语言内置的异常捕获方式就可以捕获并处理异常。当进行异步调用时,为保证线程安全,默认情况下异常不会被抛出,而是被静静的忽略,当你希望处理它们时,只需要为客户端挂载一个错误处理事件,就可以处理异步调用时发生的所有异常了。

4多线程与线程安全编辑

不论是 Hprose 服务器端还是客户端,都是线程安全的。因此你可以在多线程环境下安全的使用它们,而不必为每个线程创建一个对象副本。

5性能与稳定性编辑

Hprose 采用高效通用的序列化格式和算法,不论是序列化后的数据量还是序列化反序列化所花费的时间都远远小于其它远程调用所使用的序列化方式,因此在远程调用中与其它方式相比,完成同样功能的调用,Hprose占用更少的带宽和时间。另外在网络传输中,Hprose采用流式传输,避免了二次编码带来的效率损耗,同时有效的节省了内存和CPU的占用。
同样一台服务器在同样的带宽下,使用 Hprose 发布服务相对于其它方式来说,可以承载更大的用户量,比其它方式更加高效稳定。

6类型映射编辑

Hprose 的序列化格式中带有完备的类型信息,它与各种语言之间有着固定的完备的类型映射。各种语言之间通过这种类型映射机制得以互通。Hprose 不但支持各种语言中所有基本类型的互通,连复杂的带有图型结构的容器类型与自定义类型都可以完美映射。

7弱类型与动态性编辑

Hprose 序列化格式中虽然包含有完备的类型信息和到各种语言的类型映射。但它与其它远程调用不同的是,它还支持弱类型映射机制,一种 Hprose 类型可以映射为某语言中的多个类型,多种 Hprose 类型也可以映射为某语言中的一种类型。有了这种弱类型映射机制,强类型语言弱类型语言之间的互通变得更加方便,甚至连强类型语言之间的互通都可以享受到弱类型带来的便利。
Hprose 与其它远程调用的另一点不同是,它具有很强的动态特征。例如:
它支持调用期的类型绑定。它支持可变长参数的调用。它支持引用参数传递的调用。它支持可变类型参数的调用。它支持可变类型结果的调用。它支持对不存在的方法进行调用。这些特性不仅对于动态语言来说相当有用,即便是对于静态语言来说,它同样可以享受到这些动态性带来的便利。

8安全与身份认证编辑

Hprose 支持通过使用 https 方式实现安全的服务发布与调用。而且 Hprose 还提供了专用于身份认证的事件机制,您只需要挂载自己需要的身份认证事件,就可以在服务被调用之前进行身份验证。

9负载均衡编辑

Hprose 目前基于 HTTP 传输的实现支持众多种类的 Web 服务器。任何在 Web 上可以使用的负载均衡手段,您都可以直接用于 Hprose 的服务发布中。另外,您还可以灵活的运用 Hprose 本身来实现各种复杂情况下的负载均衡。

10事务编辑

事务是面向数据的,而 Hprose 是面向动作的。因此 Hprose 与事务之间没有直接的联系。但是如果你需要在某种语言所发布的服务当中操作数据并需要事务处理时,你可以使用那种语言支持的方式来实现事务操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: