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 与事务之间没有直接的联系。但是如果你需要在某种语言所发布的服务当中操作数据并需要事务处理时,你可以使用那种语言支持的方式来实现事务操作。

转载于:https://blog.51cto.com/westsky/1587536

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

  1. Hprose开源的高性能远程对象服务引擎

    2019独角兽企业重金招聘Python工程师标准>>> Hprose是andot开发的一套开源的高性能远程对象服务 引擎(High Performance Remote Object ...

  2. 跨平台、跨语言应用开发工具,Elements 介绍

    目录 1,Elements 介绍 2,Elements 版本 3,Elements 能干嘛 4,Elements  IDES 5,Elements 工具 1,Elements 介绍 RemObject ...

  3. 跨语言rpc框架Thrift

    RPC 全称 Remote Procedure Call--远程过程调用.RPC技术简单说就是为了解决远程调用服务 的一种技术,使得调用者像调用本地服务一样方便透明 Thrift的定义   Thrif ...

  4. server如何调用 thrift_一文带你了解 Thrift,一个可伸缩的跨语言 RPC 框架(pinpoint 源码分析系列)...

    Thrift 是什么研究分布式调用链工具pinpoint的时候,在源码里看到了Thrift相关的代码,所以来了兴趣,想研究研究这个框架.Thrift 目前是 Apache 的一个项目,但是它是由fac ...

  5. 混合编程黑科技:跨语言编程问题迎刃而解的3个要点

    首先,混合编程是什么鬼? 这个世界上编程语言真不少,光常用就有:C.C++.Java.C#.Objective-C.Javascript.Python.Lua.Swift等等等,遑论一些专业性比较强的 ...

  6. 跨语言RPC框架Thrift详解

    一. 概念 Apache的Thrift软件框架,是用来进行可伸缩的.跨语言的服务开发,它通过一个代码生成引擎来构建高效.无缝的服务,这些服务能够实现跨语言调度,目前支持的语言有: C++, Java, ...

  7. 跨语言调用Hangfire定时作业服务

    背景 Hangfire允许您以非常简单但可靠的方式执行后台定时任务的工作.内置对任务的可视化操作.非常方便. 但令人遗憾的是普遍都是业务代码和hagnfire服务本身聚合在一个程序中运行,极大的限制了 ...

  8. 什么是 Thrift(RPC)?一种接口描述语言和二进制通讯协议,用来定义和创建跨语言的服务

    Table of Contents 什么是Thrift 架构 什么是RPC框架? Thrift的协议栈结构 优点 创建一个Thrift服务 Thrift的第一个java小实例 Thrift是一种接口描 ...

  9. Atitit.跨语言反射api 兼容性提升与增强 java c#。Net  php  js

    Atitit.跨语言反射api 兼容性提升与增强 java c#.Net  php  js 1. 什么是反射1 1.1.       反射提供的主要功能:2 1.2.       实现反射的过程:2 ...

最新文章

  1. [DiscuzNt]整合DiscuzNt论坛目前所发现的小BUG及个人简单解决办法
  2. android开发地址选择器,Android地址选择器 类似于京东的地址选择
  3. Java线程的生命周期及线程的几种状态
  4. 优先级队列PriorityQueue在算法问题中的使用
  5. 计算已经生活了多少天的小题目
  6. Linux常用命令汇总--ln
  7. 学生渐进片add如何给_【收藏】为青少年验配渐进多焦点时,如何选择合适ADD?...
  8. C# Winform程序本地化应用
  9. PHP API微信网页授权接口实现
  10. matlab在机电一体化的仿真图,基于simulink的机电一体化系统案例仿真教学研究
  11. 中国大陆主要银行卡号对应
  12. 计算机网络【课程复习】
  13. 代码设计时应遵循哪些原则
  14. asterisk meetme 会议实现
  15. 电脑怎么打出冒号符号_冒号的用法有哪些?写作文的时候冒号怎么用?冒号在电脑上怎么打出来?...
  16. 微信公众号监听手机返回键事件jssdk—wx.closeWindow
  17. 单线激光雷达原理深度解析
  18. PTA-至多删三个字符-(dp+容斥)
  19. VSC/SMC(十四)——全局快速Terminal滑模控制(含程序模型)
  20. 在TP-LINK WR841N v7上安装OpenWrt和U-Boot/Breed教程

热门文章

  1. [RK3288] AP6335WIFI模块移植(板级dts文件代码编写)
  2. 牛客网——小白月赛13 —— A题
  3. STM32 HAL CubeMX断码屏配置与使用
  4. java urlencoder 特殊_java URLEncoder 中特殊处理
  5. 科技新品 | 佳能18英寸4K/HDR专业监视器;小派科技Pimax Reality系列VR设备;三星半导体3款车用芯片方案...
  6. 作为一个江苏人,我眼中的苏宁
  7. 自制图标字体FontAwesome
  8. 解决各个浏览器文件下载出现文件名中文乱码问题
  9. 软考高级(信息系统项目管理师)高频考点:项目质量管理
  10. imperva CDN的优势有哪些