有了整體的瞭解後,可以發現Hessian的這個遠程過程調用,完全使用動態代理來實現的,其實從客戶端代碼不難看出,HessianProxyFactory的create方法就是創建接口Basic的代理類,該類實現了Basic接口,JDK的proxy類會自動用 InvocationHandler 的實現類(該類在Hessian中表現爲HessianProxy)的invoke方法體 來填充所生成代理類的方法體,從而實現遠程調用,傳輸過程使用的是基於Http的二進制字節流。
RMI與Hessian的調用過程比較:
[code]Hessian:客戶端(basic.hello())——>序列化寫到輸出流——>遠程方法(服務器端)——>序列化寫到輸出流 ——>客戶端讀取輸入流——>輸出結果
RMI:客戶端——>stub——>序列化——>skeleton——>遠程方法——>序列化——>stub—— >輸出結果[/code]
服務端的是一個簡單的加密、解密方法,各種協議使用同一個實現的代碼。
客戶端是獨立的java程序,分別用各種協議對服務端的方法進行調用。每一種協議循環調用n次,然後取平均值。
循環1,000次的測試
第一次
[code]Axis --------------->> Total time: 11123 ms, Avg time: 11.123 ms
Burlap ------------->> Total time: 866 ms, Avg time: 0.866 ms
Hessian ------------>> Total time: 581 ms, Avg time: 0.581 ms
REST --------------->> Total time: 929 ms, Avg time: 0.929 ms
AxisUsingWSDL2Java ->> Total time: 11998 ms, Avg time: 11.998 ms[/code]
第二次
[code]Axis --------------->> Total time: 11256 ms, Avg time: 11.256 ms
Burlap ------------->> Total time: 816 ms, Avg time: 0.816 ms
Hessian ------------>> Total time: 582 ms, Avg time: 0.582 ms
REST --------------->> Total time: 919 ms, Avg time: 0.919 ms
AxisUsingWSDL2Java ->> Total time: 11908 ms, Avg time: 11.908 ms[/code]
循環10,000次的測試
第一次
[code]Axis --------------->> Total time: 88013 ms, Avg time: 8.8013 ms
Burlap ------------->> Total time: 5789 ms, Avg time: 0.5789 ms
Hessian ------------>> Total time: 5162 ms, Avg time: 0.5162 ms
REST --------------->> Total time: 8316 ms, Avg time: 0.8316 ms
AxisUsingWSDL2Java ->> Total time: 112801 ms, Avg time: 11.2801 ms[/code]
第二次
[code]Axis --------------->> Total time: 87359 ms, Avg time: 8.7359 ms
Burlap ------------->> Total time: 5784 ms, Avg time: 0.5784 ms
Hessian ------------>> Total time: 5084 ms, Avg time: 0.5084 ms
REST --------------->> Total time: 7983 ms, Avg time: 0.7983 ms
AxisUsingWSDL2Java ->> Total time: 113234 ms, Avg time: 11.3234 ms[/code]
測試結果
Hessian最快,Burlap第二,REST第三,Axis最慢。前3種要比Axis快了10倍或者更多。
上面的測試,服務端用的是Resin-3.0.13,出於好奇,我又用Tomcat-5.5.9測試了一把,[color=red]結果是Resin確實比Tomcat快些。[/color]Tomcat-5.5.9 循環10,000次的測試
[code]Axis --------------->> Total time: 122551 ms, Avg time: 12.2551ms
Burlap ------------->> Total time: 6401 ms, Avg time: 0.6401ms
Hessian ------------>> Total time: 5745 ms, Avg time: 0.5745ms
REST --------------->> Total time: 8090 ms, Avg time: 0.809ms
AxisUsingWSDL2Java ->> Total time: 156908 ms, Avg time: 15.6908ms[/code]
幾種基於HTTP協議的RPC性能比較
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
使用Eclipse RCP進行桌面程序開發
TalentPig
2018-08-27 12:59:59
類似dubbo的分佈式RPC框架
tb_bin
2018-08-27 03:33:34
【RPC】遠程接口調用實例
crainnogao
2018-08-26 09:21:37
20180720 簡述如何使用 Apache Thrift
芽生三月
2018-08-26 03:35:53
Dubbo的擴展機制
闰六月
2018-08-25 22:26:53
Motan客戶端源碼閱讀
闰六月
2018-08-25 22:26:53
梳理Dubbo擴展的理解
闰六月
2018-08-25 22:26:53
Motan服務的啓動
闰六月
2018-08-25 22:26:53
再談Motan服務的啓動
闰六月
2018-08-25 22:26:53
Spring配置文件解析
闰六月
2018-08-25 22:26:53
RPC for C/C++
Alan_Pisces
2018-08-25 20:07:02
【知】XP時間無法同步(rpc服務器不可用)
code_lyoko
2018-08-25 17:47:31
netty 4.0.24版本Direct Memory Leak
Colebaba
2018-08-25 14:59:01
RPC TCP 常用參數設置
Colebaba
2018-08-25 14:58:58