RPC(远程过程调用)
1、RPC和HTTP對比
1.1 具體實現
RPC:可以基于TCP協議,也可以基于HTTP協議。
HTTP:基于HTTP協議
1.2 效率
RPC:自定義具體實現可以減少很多無用的報文內容,使得報文體積更小。
HTTP:如果是HTTP 1.1 報文中很多內容都是無用的。如果是HTTP2.0以后和RPC相差不大,比RPC少的可能就是一些服務治理等功能。
1.3 連接方式
RPC:長連接支持。
HTTP:每次連接都是3次握手。(斷開鏈接為4次揮手)
1.4 性能
RPC可以基于很多序列化方式。如:thrift
HTTP 主要是通過JSON,序列化和反序列效率更低。
1.5 注冊中心
RPC :一般RPC框架都帶有注冊中心。
HTTP:都是直連。
1.6 負載均衡
RPC:絕大多數RPC框架都帶有負載均衡測量。
HTTP:一般都需要借助第三方工具。如:nginx
1.7 綜合結論
RPC框架一般都帶有豐富的服務治理等功能,更適合企業內部接口調用。而HTTP更適合多平臺之間相互調用。
2、HttpClient實現RPC
2.1、Ajax發送json參數寫法
var json = '[{"id":123,"name":"bjsxt"},{"id":123,"name":"bjsxt"}]'; $.ajax({url:'/demo5',type:'post',success:function(data){alert(data);for(var i = 0 ;i<data.length;i++){alert(data[i].id +" "+data[i].name);}},contentType:'application/json',//請求體中內容類型dataType:'json',//響應內容類型。data:json});2.2、跨域
跨域:協議、ip、端口中只要有一個不同就是跨域請求。
同源策略:瀏覽器默認只允許ajax訪問同源(協議、ip、端口都相同)內容。
解決同源策略:
在控制器接口上添加@CrossOrigin。表示允許跨域。本質在響應頭中添加Access-Control-Allow-Origin: *
3、RMI實現RPC
1 RMI簡介
RMI(Remote Method Invocation) 遠程方法調用。
RMI是從JDK1.2推出的功能,它可以實現在一個Java應用中可以像調用本地方法一樣調用另一個服務器中Java應用(JVM)中的內容。
RMI 是Java語言的遠程調用,無法實現跨語言。
2 執行流程
Registry(注冊表)是放置所有服務器對象的命名空間。 每次服務端創建一個對象時,它都會使用bind()或rebind()方法注冊該對象。 這些是使用稱為綁定名稱的唯一名稱注冊的。
要調用遠程對象,客戶端需要該對象的引用。即通過服務端綁定的名稱從注冊表中獲取對象(lookup()方法)。
3 API介紹
3.1 Remote
java.rmi.Remote 定義了此接口為遠程調用接口。如果接口被外部調用,需要繼承此接口。
3.2 RemoteException
java.rmi.RemoteException
繼承了Remote接口的接口中,如果方法是允許被遠程調用的,需要拋出此異常。
3.3 UnicastRemoteObject
java.rmi.server.UnicastRemoteObject
此類實現了Remote接口和Serializable接口。
自定義接口實現類除了實現自定義接口還需要繼承此類。
3.4 LocateRegistry
java.rmi.registry.LocateRegistry
可以通過LocateRegistry在本機上創建Registry,通過特定的端口就可以訪問這個Registry。
3.5 Naming
java.rmi.Naming
Naming定義了發布內容可訪問RMI名稱。也是通過Naming獲取到指定的遠程方法。
總結
以上是生活随笔為你收集整理的RPC(远程过程调用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿拉善在哪 阿拉善属于哪里
- 下一篇: dubbo小项目