Hessian原理與程序設計

1、Hessian定義

  Hessian與WebService同樣,能夠完成遠程方法調用。Hessian的接口調用基於Http,是基於Binary-RPC協議實現,是一種二進制數據格式的交互方式,因此能夠跨不一樣的語言平臺。html

 

2、效率比較

 RMI(Java Remote Method Invocation) Java遠程方法調用,是Java自帶的,只能用於Java程序之間的遠程訪問。git

 Httpinvoker使用Java的序列化技術傳輸對象,與RMI本質上是同樣的,從效率上看,兩者也相差無幾。spring

 RMI > Httpinvoker >= Hessian >> WebService瀏覽器

Hessian在傳輸少許對象的時候,比RMI還要快速,但傳輸數據結構複雜的對象或大量數據對象的時候,比RMI要慢20%左右,但只是在數據量特別大的時候。安全

效率最低的就是WebService,使用的是XML,協議標準。微信

 

3、Hessian原理與協議簡析

一、Hessian中Client與Server的交互是基於Http-post方式。數據結構

二、Hessian將輔助信息封裝在Http-header中,好比受權token等,咱們能夠基於Http-header來封裝關於"安全校驗""meta數據"等hessian提供了簡單的"校驗"機制。spring-boot

三、關於Hessian的交互核心數據,好比調用方法和參數列表信息,將經過post請求的body體直接發送,格式爲字節流。post

四、對於hessian的Server端響應數據,將在Response中經過字節流的方式直接輸出。spa

 

Client端:

在Client端,核心API爲:

1) HessianProxyFactory: 負責託管"遠程接口"和"遠程hessian服務的URL",並生成代理類(Java Proxy實例)。

2) HessianProxy當代理實例的方法調用時,HessianProxy負責序列化"方法名"/"參數列表"等,並調用遠程URL獲取響應數據;同時也負責反序列化。

3) HessianOutput: 輸出流控制,用來序列化請求的數據。負責將序列化的字節數據,按照協議,寫入inputStream,並經過URL Connection發送給遠端。

4) HessianInput: 輸入流控制,用來反序列化響應的結果,其中包括remote端的異常棧(在client端將會被從新拋出),「Fault」信息(remote端的失敗信息,好比格式錯誤等);不少時候,你能夠經過指定http response-code值來實現特定的請求失敗信號。

 

4、代碼示例

 Hessian一個入門案例:https://blog.csdn.net/xzm_rainbow/article/details/17040953

 參考以上連接寫了兩個spring-boot工程:hessian-server、hessian-client

 FIXME具體示例代碼已傳到碼雲上:https://gitee.com/xmy_open_project/hessian

 分別啓動hessian-server、hessian-client的ApplicationMain方法

 在瀏覽器中輸入http://localhost:8080/getUser能夠看到返回{"id":1,"name":"我是id:1對應的用戶"}

 

 

 

參考文獻
微信收藏:https://mp.weixin.qq.com/s/GaoEw-LmcFCgK0k097Pfbg
原文地址:https://blog.csdn.net/zhaifengmin/article/details/45166151

https://blog.csdn.net/xzm_rainbow/article/details/17040953

http://www.leftso.com/blog/337.html

相關文章
相關標籤/搜索