Rpc编程系列文章第三篇:Hessian RPC一个老的RPC框架

简介: Rpc编程系列文章第三篇:Hessian RPC一个老的RPC框架

前言

不从恶人的计谋,不站罪人的道路,不坐亵慢人的座位,惟喜爱耶和华的律法,昼夜思想,这人便为有福!他要像一棵树栽在溪水旁,按时候结果子,叶子也不枯干。凡他所做的尽都顺利。

如何找到孙帅本人

本文内容整理自《孙哥说Dubbo系列视频课程》,老师实力十分雄厚,B站搜孙帅suns可以找到本人,或者直接添加老师微信号suns45

一:Hessian RPC

1:Hession RPC一个老的RPC框架

Hessian RPC是一个非常老的RPC框架,2010年以前还是非常棒的。现在没人用的原因是因为它不符合现在新的这些潮流:注册中心,熔断,服务管理等等。但是RPC当中几个核心的内容:网络通讯、协议、序列化、代理是全部包含的。

2:老,为什么还要研究?

纯粹的RPC,只解决了RPC中的上述四个核心问题。

Hessian他的序列化方式在Dubbo还在使用,Dubbo当中的Hession是阿里定制的(Hession Lite) Dubbo默认启动的。

3:Hession RPC概念

1:Resin服务器的伴生产品。

2:一个基于Java语言设计的RPC框架,只支持Java编程语言,也就是服务的调用者和提供者都得是Java开发的服务。这些可不是废话,我们一些新的RPC技术(gRPC,Thrift)支持多种编程语言。

3:序列化协议是二进制的。

4:官网: http://hessian.caucho.com/doc/

二:Hessian RPC设计思想

1:Hession依赖于服务器

Hessian RPC作为Resin服务器的伴生产品。作为服务端来讲,Hessian在运行过程中依赖的就是我们的Tomcat服务器,或者Resin,他因为是Resin的伴生产品,他依赖于我们线程的Web服务器即可。这样的话,就不需要我们处理协议问题,因为服务器本身使用的是Http协议,刚才我们提到了Hessian的协议是二进制的,Http协议也是可以走二进制,在他的请求体中走二进制。我们说是Http协议是文本协议,但是Http协议(消息体)也是可以走二进制的。

2:Hession服务提供者必须为Service定义接口

有了服务器之后,我们服务的提供者我们需要提供服务,也就是我们的Service,也就是我们原来开发的Service。只不过我们使用Hessian进行调用的话,我们的Service必须定义接口(Interface)我们去给他的接口去定义实现类。为什么有这样的要求呢?

3:为什么必须定义接口?

服务调用者,也就是Java客户端的Service,服务的提供者也就是服务端的Service。

我们忽略了一个问题:我们的服务调用者,调用服务的时候,我们必须在服务的调用端必须要做代理,如果我们使用JDK做代理的话,必须要实现相同的接口。从广义的代理上来讲,我们可以使用CgLib的继承关系来做代理,理论上是没有任何问题的,只不过Hessian使用的较早,当时CgLib不是特别流行,导致Hessian内部只使用JDK作为代理。

4:必须使用Serializable接口

本质上,这是定义了序列化方式。

5:服务的发布

A:服务的提供者

服务端如何将服务发布出去,让调用者知道服务端提供了那些服务?Hessian当中可没有注册中心,服务管理这一说。是通过Hession为我们提供的一个Servlet使用的。

我们如何基于Servlet发布一个服务,让调用者可知呢?只需要在web.xml当中进行配置一下就行了。具体内容,在编码中我们会写的。

这里需要注意的是,我们现在的请求的是二进制的,走Http二进制的数据,所以Hession只能走Post请求。

B:服务的调用者

代理的这个事,不需要我们来开发了,Hessian帮我们开发了一个工具类,HessianProxyFactory这个类即可,但是我们需要提供两个要素:具体的Service.class和URL

基于服务提供方的Service.class我们可以做代理,拿到了URL之后,我们可以发送请求。

服务端,我们开发了Service的接口,我们的客户端也得使用服务的接口,所以这个服务的接口需要做成公共模块,也就是Maven当中的Common模块。

相关文章
|
6月前
|
设计模式 负载均衡 网络协议
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
262 0
|
16天前
|
自然语言处理 负载均衡 API
gRPC 一种现代、开源、高性能的远程过程调用 (RPC) 可以在任何地方运行的框架
gRPC 是一种现代开源高性能远程过程调用(RPC)框架,支持多种编程语言,可在任何环境中运行。它通过高效的连接方式,支持负载平衡、跟踪、健康检查和身份验证,适用于微服务架构、移动设备和浏览器客户端连接后端服务等场景。gRPC 使用 Protocol Buffers 作为接口定义语言,支持四种服务方法:一元 RPC、服务器流式处理、客户端流式处理和双向流式处理。
|
3月前
|
Dubbo 网络协议 Java
RPC框架:一文带你搞懂RPC
这篇文章全面介绍了RPC(远程过程调用)的概念、原理和应用场景,解释了RPC如何工作以及为什么在分布式系统中广泛使用,并探讨了几种常用的RPC框架如Thrift、gRPC、Dubbo和Spring Cloud,同时详细阐述了RPC调用流程和实现透明化远程服务调用的关键技术,包括动态代理和消息的编码解码过程。
RPC框架:一文带你搞懂RPC
|
2月前
|
XML 负载均衡 监控
分布式-dubbo-简易版的RPC框架
分布式-dubbo-简易版的RPC框架
|
3月前
|
前端开发 C# 开发者
WPF开发者必读:MVVM模式实战,轻松构建可维护的应用程序,让你的代码更上一层楼!
【8月更文挑战第31天】在WPF应用程序开发中,MVVM(Model-View-ViewModel)模式通过分离关注点,提高了代码的可维护性和可扩展性。本文详细介绍了MVVM模式的三个核心组件:Model(数据模型)、View(用户界面)和ViewModel(处理数据绑定与逻辑),并通过示例代码展示了如何在WPF项目中实现MVVM模式。通过这种模式,开发者可以更高效地构建桌面应用程序。希望本文能帮助你在WPF开发中更好地应用MVVM模式。
173 0
|
3月前
|
XML 存储 JSON
(十二)探索高性能通信与RPC框架基石:Json、ProtoBuf、Hessian序列化详解
如今这个分布式风靡的时代,网络通信技术,是每位技术人员必须掌握的技能,因为无论是哪种分布式技术,都离不开心跳、选举、节点感知、数据同步……等机制,而究其根本,这些技术的本质都是网络间的数据交互。正因如此,想要构建一个高性能的分布式组件/系统,不得不思考一个问题:怎么才能让数据传输的速度更快?
|
3月前
|
网络协议 编译器 Go
揭秘!TCP、RPC、gRPC、HTTP大PK,谁才是网络通信界的超级巨星?一篇文章带你秒懂!
【8月更文挑战第25天】本文以教程形式深入对比了TCP、RPC、gRPC与HTTP这四种关键通信协议,并通过Go语言中的示例代码展示了各自的实现方法。TCP作为一种可靠的传输层协议,确保了数据的完整性和顺序性;RPC与gRPC作为远程过程调用框架,特别适合于分布式系统的函数调用与数据交换,其中gRPC在性能和跨语言支持方面表现出色;HTTP则是广泛应用于Web浏览器与服务器通信的应用层协议。选择合适的协议需根据具体需求综合考量。
242 0
|
5月前
|
存储 缓存 Linux
【实战指南】嵌入式RPC框架设计实践:六大核心类构建高效RPC框架
在先前的文章基础上,本文讨论如何通过分层封装提升一个针对嵌入式Linux的RPC框架的易用性。设计包括自动服务注册、高性能通信、泛型序列化和简洁API。框架分为6个关键类:BindingHub、SharedRingBuffer、Parcel、Binder、IBinder和BindInterface。BindingHub负责服务注册,SharedRingBuffer实现高效数据传输,Parcel处理序列化,而Binder和IBinder分别用于服务端和客户端交互。BindInterface提供简单的初始化接口,简化应用集成。测试案例展示了客户端和服务端的交互,验证了RPC功能的有效性。
401 7
|
4月前
|
分布式计算 负载均衡 数据安全/隐私保护
什么是RPC?有哪些RPC框架?
RPC(Remote Procedure Call,远程过程调用)是一种允许运行在一台计算机上的程序调用另一台计算机上子程序的技术。这种技术屏蔽了底层的网络通信细节,使得程序间的远程通信如同本地调用一样简单。RPC机制使得开发者能够构建分布式计算系统,其中不同的组件可以分布在不同的计算机上,但它们之间可以像在同一台机器上一样相互调用。
151 8
|
4月前
|
网络协议 Dubbo Java
什么是RPC?RPC和HTTP对比?RPC有什么缺点?市面上常用的RPC框架?
选择合适的RPC框架和通信协议,对于构建高效、稳定的分布式系统至关重要。开发者需要根据自己的业务需求和系统架构,综合考虑各种因素,做出适宜的技术选型。
402 1