日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RPC(远程过程调用)

發(fā)布時(shí)間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RPC(远程过程调用) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、RPC和HTTP對比

1.1 具體實(shí)現(xiàn)

RPC:可以基于TCP協(xié)議,也可以基于HTTP協(xié)議。
HTTP:基于HTTP協(xié)議

1.2 效率

RPC:自定義具體實(shí)現(xiàn)可以減少很多無用的報(bào)文內(nèi)容,使得報(bào)文體積更小。
HTTP:如果是HTTP 1.1 報(bào)文中很多內(nèi)容都是無用的。如果是HTTP2.0以后和RPC相差不大,比RPC少的可能就是一些服務(wù)治理等功能。

1.3 連接方式

RPC:長連接支持。
HTTP:每次連接都是3次握手。(斷開鏈接為4次揮手)

1.4 性能

RPC可以基于很多序列化方式。如:thrift
HTTP 主要是通過JSON,序列化和反序列效率更低。

1.5 注冊中心

RPC :一般RPC框架都帶有注冊中心。
HTTP:都是直連。

1.6 負(fù)載均衡

RPC:絕大多數(shù)RPC框架都帶有負(fù)載均衡測量。
HTTP:一般都需要借助第三方工具。如:nginx

1.7 綜合結(jié)論

RPC框架一般都帶有豐富的服務(wù)治理等功能,更適合企業(yè)內(nèi)部接口調(diào)用。而HTTP更適合多平臺之間相互調(diào)用。

2、HttpClient實(shí)現(xiàn)RPC

2.1、Ajax發(fā)送json參數(shù)寫法

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',//請求體中內(nèi)容類型dataType:'json',//響應(yīng)內(nèi)容類型。data:json});

2.2、跨域

跨域:協(xié)議、ip、端口中只要有一個(gè)不同就是跨域請求。
同源策略:瀏覽器默認(rèn)只允許ajax訪問同源(協(xié)議、ip、端口都相同)內(nèi)容。
解決同源策略:
在控制器接口上添加@CrossOrigin。表示允許跨域。本質(zhì)在響應(yīng)頭中添加Access-Control-Allow-Origin: *

@RequestMapping("/demo5") @ResponseBody @CrossOrigin public List<People> demo5(@RequestBody List<People> list) {System.out.println(list);return list; }

3、RMI實(shí)現(xiàn)RPC

1 RMI簡介

RMI(Remote Method Invocation) 遠(yuǎn)程方法調(diào)用。
RMI是從JDK1.2推出的功能,它可以實(shí)現(xiàn)在一個(gè)Java應(yīng)用中可以像調(diào)用本地方法一樣調(diào)用另一個(gè)服務(wù)器中Java應(yīng)用(JVM)中的內(nèi)容。
RMI 是Java語言的遠(yuǎn)程調(diào)用,無法實(shí)現(xiàn)跨語言。

2 執(zhí)行流程

Registry(注冊表)是放置所有服務(wù)器對象的命名空間。 每次服務(wù)端創(chuàng)建一個(gè)對象時(shí),它都會使用bind()或rebind()方法注冊該對象。 這些是使用稱為綁定名稱的唯一名稱注冊的。
要調(diào)用遠(yuǎn)程對象,客戶端需要該對象的引用。即通過服務(wù)端綁定的名稱從注冊表中獲取對象(lookup()方法)。

3 API介紹

3.1 Remote
java.rmi.Remote 定義了此接口為遠(yuǎn)程調(diào)用接口。如果接口被外部調(diào)用,需要繼承此接口。
3.2 RemoteException
java.rmi.RemoteException
繼承了Remote接口的接口中,如果方法是允許被遠(yuǎn)程調(diào)用的,需要拋出此異常。
3.3 UnicastRemoteObject
java.rmi.server.UnicastRemoteObject
此類實(shí)現(xiàn)了Remote接口和Serializable接口。
自定義接口實(shí)現(xiàn)類除了實(shí)現(xiàn)自定義接口還需要繼承此類。
3.4 LocateRegistry
java.rmi.registry.LocateRegistry
可以通過LocateRegistry在本機(jī)上創(chuàng)建Registry,通過特定的端口就可以訪問這個(gè)Registry。
3.5 Naming
java.rmi.Naming
Naming定義了發(fā)布內(nèi)容可訪問RMI名稱。也是通過Naming獲取到指定的遠(yuǎn)程方法。

總結(jié)

以上是生活随笔為你收集整理的RPC(远程过程调用)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。