Hessian协议详解

前言
Hessian协议是一种基于二进制的轻量级远程调用协议,用于在分布式系统中进行跨语言的通信。它使用简单的二进制格式来序列化和反序列化数据,并支持多种编程语言,如Java、C#、Python等。Hessian协议相对于其他协议的优势在于其简单性和高效性。它使用二进制进行序列化和反序列化,相对于使用XML或JSON的协议来说,Hessian的消息体更小、传输速度更快。在Java中,可以通过Hessian协议轻松地实现跨网络的方法调用。

主要特点
Hessian协议的主要特点包括:
- 高效性 :由于它使用了二进制编码,所以传输的数据量较小,可以节省带宽和网络资源。此外,Hessian协议还支持数据压缩和断点续传,以提高传输效率和可靠性。
- 跨语言支持 :Hessian协议使用了通用的编码规则,使得不同编程语言的应用程序可以相互通信。无论是Java、C++、Python还是其他编程语言,只要支持Hessian协议的栈,就可以进行跨语言的数据传输。
- 接口简单易用 :Hessian协议的接口设计简单明了,易于学习和使用。
文件体积小:由于Hessian协议使用二进制编码,相对于使用XML或JSON的协议来说,消息体更小,传输速度更快。 - 传输速度快 :由于消息体小,传输速度快,因此可以更快地完成远程调用。
跨平台性:Hessian协议可以跨平台使用,无论是在Windows、Linux还是其他操作系统上,都可以使用Hessian协议进行远程调用。
这些特点使得Hessian协议在分布式系统和远程调用中具有广泛的应用价值。

应用场景
Hessian协议的主要应用场景包括:
远程服务调用 :Hessian协议可以用于在不同语言编写的服务之间进行调用。例如,Java服务可以调用Python服务或C#服务,反之亦然。
跨平台调用 :由于Hessian协议具有跨平台性,因此可以在不同的操作系统之间进行通信,如Windows、Linux等。
文件传输 :Hessian协议支持文件传输,可以将文件作为参数进行传递。这使得在分布式系统中进行文件传输变得更加简单和高效。
大数据传输 :当需要传输的数据量较大时,使用Hessian协议可以减少传输时间和网络带宽的使用。
高并发处理 :由于Hessian协议具有高效性和跨语言支持,因此在高并发处理场景下,可以更好地应对不同的请求和负载。
总之,Hessian协议是一种高效、跨语言支持、轻量级的远程调用协议,适用于多种分布式系统和应用场景。
实现示例
以下是一个简单的Java实现示例,使用Hessian协议进行远程方法调用:
- 首先,定义一个接口:
public interface HelloService {String sayHello(String name);
}
- 然后,在服务器端实现该接口:
public class HelloServiceImpl implements HelloService {public String sayHello(String name) {return "Hello, " + name + "!";}
}
- 接着,将该实现类发布到注册中心,并注册为HelloService接口的实现:
public class Server {public static void main(String[] args) throws Exception {// 创建服务实现对象HelloService helloService = new HelloServiceImpl();// 发布服务到注册中心,并注册为HelloService接口的实现HessianUtil.register(helloService, "HelloService");// 监听端口,等待客户端连接ServerSocket serverSocket = new ServerSocket(18080);while (true) {Socket socket = serverSocket.accept();new Thread(new ClientHandler(socket)).start();}}
}
- 最后,在客户端调用远程方法:
public class Client {public static void main(String[] args) throws Exception {// 连接到服务器端,获取HelloService接口的实现对象HelloService helloService = (HelloService) HessianUtil.getProxy("HelloService", "localhost", 18080);// 调用远程方法sayHello,并输出结果String result = helloService.sayHello("world");System.out.println(result);}
}

存在的问题
虽然Hessian协议是一种高效、跨语言的远程调用协议,但在实际应用中也存在一些问题:
序列化和反序列化开销:Hessian协议使用二进制格式进行序列化和反序列化,虽然相对于XML或JSON等格式更高效,但仍然存在一定的开销。特别是在处理大量数据时,这种开销可能会变得较为明显。
-
传输错误难以排查 :由于Hessian协议对数据的编码和传输进行了简化,当传输出现错误时,可能难以确定具体的原因。这给开发和维护人员带来了额外的排查难度。
-
缺乏完整的文档和社区支持 :相对于其他一些流行的远程调用协议,如Dubbo、gRPC等,Hessian协议的文档和社区支持相对较少。这可能会给使用带来一些不便。
-
安全性问题 :虽然Hessian协议本身具有一定的安全性,但在实际应用中,仍然需要注意数据的加密、认证和授权等问题。特别是在处理敏感数据或涉及隐私信息的情况下,安全性问题尤为重要。
-
跨语言兼容性问题 :虽然Hessian协议支持多种编程语言,但不同语言之间的实现可能存在差异。这可能会导致在跨语言调用时出现一些兼容性问题或性能瓶颈。
针对这些问题,可以考虑使用其他更完善、更安全的远程调用协议,或者结合其他工具和技术来提高应用的安全性和可维护性。

拓展
通过下面的链接,我们一起来来了解更多的常用的一些网络协议
HTTP/2.0协议详解
HTTP1.1协议详解
gRPC协议详解
QUIC协议详解
Dubbo协议详解
RMI协议详解

相关文章:
Hessian协议详解
前言 Hessian协议是一种基于二进制的轻量级远程调用协议,用于在分布式系统中进行跨语言的通信。它使用简单的二进制格式来序列化和反序列化数据,并支持多种编程语言,如Java、C#、Python等。Hessian协议相对于其他协议的优势在于其简单性和高…...
【AI视野·今日Sound 声学论文速览 第三十六期】Mon, 30 Oct 2023
AI视野今日CS.Sound 声学论文速览 Mon, 30 Oct 2023 Totally 7 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers Style Description based Text-to-Speech with Conditional Prosodic Layer Normalization based Diffusion GAN Authors Neeraj Kumar, A…...
Android Jetpack的组件介绍,常见组件解析
jetpack组件有哪些 Android Jetpack是一个集成Android应用程序组件的一站式解决方案。它使开发人员能够专注于他们的应用程序的真正创新部分,而不会受到Android平台特定的限制。Jetpack组件可分为四个类别: 架构组件(Architecture Componen…...
ImportError: cannot import name ‘url_quote‘ from...
👨🏻💻 热爱摄影的程序员 👨🏻🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻🏫 一位高冷无情的编码爱好者 大家好,我是全栈工…...
一文看分布式锁
为什么会存在分布式锁? 经典场景-扣库存,多人去同时购买一件商品,首先会查询判断是否有剩余,如果有进行购买并扣减库存,没有提示库存不足。假如现在仅存有一件商品,3人同时购买,三个线程同时执…...
Jenkins自动化部署一个Maven项目
Jenkins自动化部署 提示:本教程基于CentOS Linux 7系统下进行 Jenkins的安装 1. 下载安装jdk11 官网下载地址:https://www.oracle.com/cn/java/technologies/javase/jdk11-archive-downloads.html 本文档教程选择的是jdk-11.0.20_linux-x64_bin.tar.g…...
K8S1.23.5部署(此前1.17版本步骤囊括)及问题记录
应版本需求,升级容器版本为1.23.5 kubernetes组件 一个kubernetes集群主要由控制节点(master)与工作节点(node)组成,每个节点上需要安装不同的组件。 master控制节点:负责整个集群的管理。 …...
基于java web的中小型人力资源管理系统
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
Python学习笔记--Python关键字yield
原文:http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained 注:这是一篇 stackoverflow 上一个火爆帖子的译文 问题 Python 关键字 yield 的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self,…...
CF 850 C Arpa and a game with Mojtaba(爆搜优化SG)
CF 850 C. Arpa and a game with Mojtaba(爆搜优化SG) Problem - C - Codeforces Arpa and a game with Mojtaba - 洛谷 思路:显然对于每一种质因子来说操作都是独立的 , 因此可以考虑对于每一种质因子求当前质因子的SG &#…...
kafka分布式安装部署
1.集群规划 2.集群部署 官方下载地址:http://kafka.apache.org/downloads.html (1)上传并解压安装包 [zhangflink9wmwtivvjuibcd2e package]$ tar -zxvf kafka_2.12-3.3.1.tgz -C ../software/(2)修改解压后的文件…...
[云原生2.] Kurbernetes资源管理 ---- (陈述式资源管理方式)
文章目录 1. K8s管理资源的方法类别1.1 陈述式资源管理方式1.2 声明式资源管理方式1.3 GUI式资源管理方法 2. 陈述式资源管理方式2.1 命令行工具 ---- Kubelet2.1.1 简介2.1.2 特性2.1.3 kubelet拓展命令2.1.4 kubectl基本语法2.1.5 Kubectl工具的自动补全 2.2 k8s Service 的类…...
java:IDEA中的Scratches and Consoles
背景 IntelliJ IDEA中的Scratches and Consoles是一种临时的文件编辑环境,用于写一些文本内容或者代码片段。 其中,Scratch files拥有完整的运行和debug功能,这些文件需要指定编程语言类型并且指定后缀。 举例:调接口 可以看到…...
华为 Mate 60 Pro 拆解:陆制零件比率上升至47% | 百能云芯
近日,日经新闻联合研究公司Fomalhaut Techno Solutions对华为 Mate 60 Pro 进行了拆解,揭示了这款于8月发布的新型智能手机的成本结构。拆解结果显示,该手机的国产零部件比例达到了47%,相较于三年前的 Mate 40 Pro,提高…...
ZBrush 2024(三维数字雕刻软件)
ZBrush是一款Mac数字雕刻软件,它具有以下功能: 雕刻工具:ZBrush的雕刻工具非常强大,可以让用户在3D模型上进行雕刻,就像使用传统雕塑工具一样。高精度模型创建:ZBrush可以创建高精度的3D模型,适…...
wpf devexpress 排序、分组、过滤数据
这个教程示范在GridControl如何排序数据,分组数据给一个行创建一个过滤。这个教程基于前一个教程。 排序数据 可以使用GridControl 排序数据。这个例子如下过滤数据对于Order Date 和 Customer Id 行: 1、对于Order Date 和 Customer Id 行指定Colum…...
使用Badboy录制生成 JMeter 脚本
JMeter是一款在国外非常流行和受欢迎的开源性能测试工具,像LoadRunner 一样,它也提供了一个利用本地Proxy Server(代理服务器)来录制生成测试脚本的功能,但是这个功能并不好用。所以在本文中介绍一个更为常用的方法——…...
V10 桌面版、服务器版系统加固
V10 桌面版、服务器版系统加固 一、 文档说明 本文档中涉及的加固方法主要包括:密码策略配置、防火墙规 则配置、禁用高风险服务等。 二、 V10 桌面版系统加固 2.1 密码策略配置 密码策略包括密码老化控制策略和密码复杂度策略。密码老化 控制策略需要配置/etc…...
mtgsig1.2简单分析
{"a1": "1.2", # 加密版本"a2": new Date().valueOf() - serverTimeDiff, # 加密过程中用到的时间戳. 这次服主变坏了, 时间戳需要减去一个 serverTimeDiff(见a3) ! "a3": "这是把xxx信息加密后提交给服务器, 服主…...
场景交互与场景漫游-osgGA库(5)
osgGA库 osgGA库是OSG的一个附加的工具库,它为用户提供各种事件处理及操作处理。通过osgGA库读者可以像控制Windows窗口一样来处理各种事件 osgGA的事件处理器主要由两大部分组成,即事件适配器和动作适配器。osgGA:GUIEventHandler类主要提供了窗口系统的…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
