精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java 從零開始手寫 RPC基于 Websocket 實現

開發 后端
RPC(Remote Procedure Call Protocol)--遠程過程調用協議,它是一種通過網絡從遠程計算機程序上請求服務,而不需要了解底層網絡技術的協議。

RPC

解決的問題

RPC 主要是為了解決的兩個問題:

(1)解決分布式系統中,服務之間的調用問題。

(2)遠程調用時,要能夠像本地調用一樣方便,讓調用者感知不到遠程調用的邏輯。

這一節我們來學習下如何基于 websocket 實現最簡單的 rpc 調用,后續會實現基于 netty4 的版本。

開源地址: https://github.com/houbb/rpc

完整流程

java 從零開始手寫 RPC (01) 基于 websocket 實現

其中左邊的Client,對應的就是前面的Service A,而右邊的Server,對應的則是Service B。

下面一步一步詳細解釋一下。

(1)Service A的應用層代碼中,調用了Calculator的一個實現類的add方法,希望執行一個加法運算;

(2)這個Calculator實現類,內部并不是直接實現計算器的加減乘除邏輯,而是通過遠程調用Service B的RPC接口,來獲取運算結果,因此稱之為Stub;

(3)Stub怎么和Service B建立遠程通訊呢?這時候就要用到遠程通訊工具了,也就是圖中的Run-time Library,這個工具將幫你實現遠程通訊的功能,比如Java的Socket,就是這樣一個庫,當然,你也可以用基于Http協議的HttpClient,或者其他通訊工具類,都可以,RPC并沒有規定說你要用何種協議進行通訊;

(4)Stub通過調用通訊工具提供的方法,和Service B建立起了通訊,然后將請求數據發給Service B。需要注意的是,由于底層的網絡通訊是基于二進制格式的,因此這里Stub傳給通訊工具類的數據也必須是二進制,比如calculator.add(1,2),你必須把參數值1和2放到一個Request對象里頭(這個Request對象當然不只這些信息,還包括要調用哪個服務的哪個RPC接口等其他信息),然后序列化為二進制,再傳給通訊工具類,這一點也將在下面的代碼實現中體現;

(5)二進制的數據傳到Service B這一邊了,Service B當然也有自己的通訊工具,通過這個通訊工具接收二進制的請求;

(6)既然數據是二進制的,那么自然要進行反序列化了,將二進制的數據反序列化為請求對象,然后將這個請求對象交給Service B的Stub處理;

(7)和之前的Service A的Stub一樣,這里的Stub也同樣是個“假玩意”,它所負責的,只是去解析請求對象,知道調用方要調的是哪個RPC接口,傳進來的參數又是什么,然后再把這些參數傳給對應的RPC接口,也就是Calculator的實際實現類去執行。很明顯,如果是Java,那這里肯定用到了反射。

(8)RPC接口執行完畢,返回執行結果,現在輪到Service B要把數據發給Service A了,怎么發?一樣的道理,一樣的流程,只是現在Service B變成了Client,Service A變成了Server而已:Service B反序列化執行結果->傳輸給Service A->Service A反序列化執行結果 -> 將結果返回給Application,完畢。

簡單實現

假設服務 A,想調用服務 B 的一個方法。

因為不在同一個內存中,無法直接使用。如何可以實現類似 Dubbo 的功能呢?

這里不需要使用 HTTP 級別的通信,使用 TCP 協議即可。

common

公用模塊,定義通用對象。

  • Rpc 常量
  1. public interface RpcConstant { 
  2.  
  3.  
  4.     /** 
  5.      * 地址 
  6.      */ 
  7.     String ADDRESS = "127.0.0.1"
  8.  
  9.  
  10.     /** 
  11.      * 端口號 
  12.      */ 
  13.     int PORT = 12345; 
  14.  
  15.  
  • 請求入參
  1. public class RpcCalculateRequest implements Serializable { 
  2.  
  3.  
  4.     private static final long serialVersionUID = 6420751004355300996L; 
  5.  
  6.  
  7.     /** 
  8.      * 參數一 
  9.      */ 
  10.     private int one; 
  11.  
  12.  
  13.     /** 
  14.      * 參數二 
  15.      */ 
  16.     private int two; 
  17.  
  18.  
  19.     //getter & setter & toString() 
  • 服務接口
  1. public interface Calculator { 
  2.  
  3.  
  4.     /** 
  5.      * 計算加法 
  6.      * @param one 參數一 
  7.      * @param two 參數二 
  8.      * @return 返回結果 
  9.      */ 
  10.     int add(int one, int two); 
  11.  
  12.  

server

  • 服務接口的實現
  1. public class CalculatorImpl implements Calculator { 
  2.  
  3.  
  4.     @Override 
  5.     public int add(int one, int two) { 
  6.         return one + two; 
  7.     } 
  8.  
  9.  
  • 啟動服務
  1. public static void main(String[] args) throws IOException { 
  2.     Calculator calculator = new CalculatorImpl(); 
  3.     try (ServerSocket listener = new ServerSocket(RpcConstant.PORT)) { 
  4.         System.out.println("Server 端啟動:" + RpcConstant.ADDRESS + ":" + RpcConstant.PORT); 
  5.         while (true) { 
  6.             try (Socket socket = listener.accept()) { 
  7.                 // 將請求反序列化 
  8.                 ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream()); 
  9.                 Object object = objectInputStream.readObject(); 
  10.                 System.out.println("Request is: " + object); 
  11.                 // 調用服務 
  12.                 int result = 0; 
  13.                 if (object instanceof RpcCalculateRequest) { 
  14.                     RpcCalculateRequest calculateRpcRequest = (RpcCalculateRequest) object; 
  15.                     result = calculator.add(calculateRpcRequest.getOne(), calculateRpcRequest.getTwo()); 
  16.                 } 
  17.                 // 返回結果 
  18.                 ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); 
  19.                 objectOutputStream.writeObject(result); 
  20.             } catch (Exception e) { 
  21.                 e.printStackTrace(); 
  22.             } 
  23.         } 
  24.     } 

啟動日志:

  1. Server 端啟動:127.0.0.1:12345 

client

•客戶端調用

  1. public static void main(String[] args) { 
  2.     Calculator calculator = new CalculatorProxy(); 
  3.     int result = calculator.add(1, 2); 
  4.     System.out.println(result); 
  • 計算的代理類
  1. public class CalculatorProxy implements Calculator { 
  2.  
  3.  
  4.     @Override 
  5.     public int add(int one, int two) { 
  6.         try { 
  7.             Socket socket = new Socket(RpcConstant.ADDRESS, RpcConstant.PORT); 
  8.  
  9.  
  10.             // 將請求序列化 
  11.             RpcCalculateRequest calculateRpcRequest = new RpcCalculateRequest(one, two); 
  12.             ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); 
  13.  
  14.  
  15.             // 將請求發給服務提供方 
  16.             objectOutputStream.writeObject(calculateRpcRequest); 
  17.  
  18.  
  19.             // 將響應體反序列化 
  20.             ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream()); 
  21.             Object response = objectInputStream.readObject(); 
  22.  
  23.  
  24.             if (response instanceof Integer) { 
  25.                 return (Integer) response; 
  26.             } else { 
  27.                 throw new RuntimeException(); 
  28.             } 
  29.         } catch (IOException | ClassNotFoundException e) { 
  30.             throw new RuntimeException(e); 
  31.         } 
  32.     } 
  • 調用日志

client 端

server 端

  1. Server 端啟動:127.0.0.1:12345 
  2. Request is: RpcCalculateRequest{one=1, two=2} 

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-10-20 08:05:18

Java 序列化 Java 基礎

2021-10-29 08:07:30

Java timeout Java 基礎

2021-10-21 08:21:10

Java Reflect Java 基礎

2021-10-19 08:58:48

Java 語言 Java 基礎

2019-09-23 19:30:27

reduxreact.js前端

2021-10-14 08:39:17

Java Netty Java 基礎

2021-10-27 08:10:15

Java 客戶端 Java 基礎

2015-11-17 16:11:07

Code Review

2019-01-18 12:39:45

云計算PaaS公有云

2018-04-18 07:01:59

Docker容器虛擬機

2024-12-06 17:02:26

2020-07-02 15:32:23

Kubernetes容器架構

2018-09-14 17:16:22

云計算軟件計算機網絡

2010-05-26 17:35:08

配置Xcode SVN

2024-05-15 14:29:45

2023-11-09 23:45:01

Pytorch目標檢測

2021-03-16 11:30:33

2015-05-06 09:36:05

Java語言從零開始學習

2015-10-15 14:16:24

2024-04-10 07:48:41

搜索引擎場景
點贊
收藏

51CTO技術棧公眾號

国产在线视频一区二区| 国产精品一区二区av日韩在线| 一区二区三区四区在线免费观看| 99r国产精品视频| 日本熟妇成熟毛茸茸| 少妇精品久久久一区二区三区| 欧美日韩你懂的| 亚洲理论电影在线观看| 你懂的视频在线播放| 久久精品av麻豆的观看方式| 久久久久国产精品www| 亚洲国产天堂av| 中文字幕区一区二区三| 欧美三级日韩在线| 欧美 丝袜 自拍 制服 另类| 婷婷成人激情| 久久人人爽爽爽人久久久| 91久久久亚洲精品| 精品国产xxx| 国产精品草草| 爱福利视频一区| 日韩精品无码一区二区三区久久久| 精品国产三区在线| 欧美性一二三区| www一区二区www免费| jizzjizz亚洲| 天天综合天天干| 久久久久久不卡| 婷婷亚洲精品| 日韩精品在线看片z| 亚洲污视频在线观看| 日韩欧美精品一区二区三区| 亚洲猫色日本管| 亚洲欧洲三级| 高清av在线| www精品美女久久久tv| 成人黄色在线免费观看| 国产精品久久综合青草亚洲AV| 可以看av的网站久久看| 欧美亚洲成人xxx| 日本三级2019| 黑丝一区二区| 欧美人与性动交a欧美精品| 韩国一级黄色录像| 99九九热只有国产精品| 中文国产亚洲喷潮| 亚洲一区视频在线播放| 欧美日韩播放| 国产一区二区动漫| 能直接看的av| 欧美成人精品一区二区三区在线看| 亚洲欧美激情一区| 99久久人妻无码精品系列| 色吊丝一区二区| 亚洲美女av网站| 久久精品视频18| 禁断一区二区三区在线| 夜夜躁日日躁狠狠久久88av| 精品亚洲aⅴ无码一区二区三区| 综合干狼人综合首页| 亚洲另类图片色| 制服 丝袜 综合 日韩 欧美| 成人激情诱惑| yw.139尤物在线精品视频| 国产美女福利视频| 欧美88av| 91成人福利在线| 波多野结衣爱爱| 老司机精品视频导航| 成人免费黄色网| 亚洲精品久久久久久久久久久久久久| 国产成人精品免费在线| 国产精品二区在线| 五月激情婷婷网| 国产网站一区二区三区| 一区二区在线中文字幕电影视频| 麻豆av在线导航| 亚洲妇熟xx妇色黄| 久久九九国产视频| 91成人小视频| 日韩电影中文字幕在线观看| 久久成人激情视频| 999视频精品| 久久久久久久激情视频| 国产三级精品三级在线观看| 久久国产精品99久久人人澡| 99久久精品免费看国产一区二区三区 | 中文字幕第88页| 日本一区二区三区视频在线看 | 91精品福利在线| av中文字幕网址| 红杏成人性视频免费看| 国产亚洲精品高潮| 我家有个日本女人| 视频在线观看91| 亚洲在线视频观看| 内衣办公室在线| 亚洲免费三区一区二区| 成年人免费在线播放| 亚洲日日夜夜| 日韩精品在线免费观看| 国产人妻精品一区二区三区不卡| 91久久午夜| 国产一区二区色| 四虎影视2018在线播放alocalhost| 国产精品视频一二三区| 可以看毛片的网址| 日韩免费在线电影| 日韩精品极品视频免费观看| 免费在线黄色网| 视频一区在线视频| 国精产品一区二区| 51xtv成人影院| 欧美亚洲日本一区| 欧美丰满少妇人妻精品| 欧美精品日韩| 国产一区二区在线免费视频| 天堂中文在线8| 亚洲在线视频一区| 亚洲自拍第三页| 成人在线一区| 国产成人中文字幕| 无码精品视频一区二区三区 | 日韩欧洲国产| 深夜福利一区二区| 天堂免费在线视频| 91免费视频网| 国产素人在线观看| 一区二区网站| 毛片精品免费在线观看| 又色又爽又黄无遮挡的免费视频| 久久综合狠狠综合久久激情 | 国产美女久久久久久| 日韩av电影天堂| 欧美一区二区三区四区在线观看地址 | 最新中文字幕免费视频| 国产精品嫩草影院在线看| 91a在线视频| 天天操天天爱天天干| 亚洲一区二区三区在线播放| 国产精品久久久久野外| 久久久久久久久久久久久久| 国产一区欧美二区三区| 日韩精品毛片| 欧美日本乱大交xxxxx| 国产三级黄色片| 美女脱光内衣内裤视频久久影院| 三区精品视频观看| 国产激情欧美| 日韩有码片在线观看| 国产精品熟女久久久久久| 国产精品不卡视频| 亚洲天堂伊人网| 你懂的网址国产 欧美| 99re在线观看| 999福利在线视频| 日韩成人在线播放| 欧美精品一二三四区| 久久久欧美精品sm网站| 成年网站在线播放| 国产精品不卡| 91超碰rencao97精品| 久草在线新免费首页资源站| 亚洲国产成人在线视频| 99久久久久久久久| 国产精品你懂的| 在线成人精品视频| 狠色狠色综合久久| 久久综合入口| 日本黄色成人| 久久久久久欧美| 欧美偷拍视频| 欧美日韩国产综合一区二区| 欧美一区二区三区爽爽爽| 成人免费黄色在线| 青青青国产在线视频| 91久久电影| 国产一区二区三区高清视频| 亚洲电影有码| 欧美日韩国产二区| 欧洲亚洲在线| 日韩一区二区视频| 精品国产一区二区三区四| 国产精品久久久久久久久久久免费看 | 亚洲综合免费视频| 亚洲一区二区三区四区中文字幕| www.av欧美| 国产乱子伦一区二区三区国色天香| 亚洲精品久久久久久久蜜桃臀| 岳的好大精品一区二区三区| 国产热re99久久6国产精品| 日本一本在线免费福利| 亚洲免费电影一区| 99精品在线看| 日本高清视频一区二区| 免费在线看黄网址| 国产日韩欧美一区二区三区乱码| 一本之道在线视频| 三级在线观看一区二区| 狠狠噜天天噜日日噜| 精品一区二区三区的国产在线观看| 亚洲va欧美va国产综合久久| 国模套图日韩精品一区二区| 欧美日韩第一页| 1024视频在线| 亚洲精品一区二区网址| 精品国自产拍在线观看| 在线免费观看日本欧美| 国产精品二区一区二区aⅴ| 国产精品视频一二三区| 国精产品一区一区三区免费视频| 国产精品自在欧美一区| 最新中文字幕免费视频| 麻豆久久精品| 日本午夜激情视频| 亚洲综合小说| 一区二区三区av| 国产一区二区观看| 国产日韩欧美亚洲一区| 欧美日韩黄网站| 国产欧美va欧美va香蕉在线 | 91老司机在线| 91av一区| 国产精品狠色婷| 亚洲综合电影| 国产91精品久久久| www.youjizz.com在线| 欧美黑人一区二区三区| 黄网站视频在线观看| 在线观看中文字幕亚洲| 男女污污视频在线观看| 亚洲老头老太hd| 深夜福利在线观看直播| 亚洲电影在线看| 性生活视频软件| 日韩亚洲欧美一区二区三区| 国产免费无遮挡| 777色狠狠一区二区三区| 中文字幕码精品视频网站| 在线一区二区三区四区五区| 亚洲欧美精品一区二区三区| 精品国产成人av| av资源免费观看| 欧美午夜激情小视频| 久久免费激情视频| 黑人巨大精品欧美一区二区| 福利一区二区三区四区| 精品国产户外野外| 久久狠狠高潮亚洲精品| 精品久久久久久中文字幕大豆网| 国产精彩视频在线| 五月天激情综合| 久久青青草原亚洲av无码麻豆| 欧美性xxxx| 伊人成年综合网| 欧美日韩激情一区| a天堂在线观看视频| 精品久久久久香蕉网| 免费观看黄色一级视频| 日韩国产精品亚洲а∨天堂免| 欧美一区二区视频| 自拍偷拍亚洲在线| 精品麻豆一区二区三区| 久久亚洲精品网站| 动漫一区二区| 日韩美女在线观看| 香蕉成人在线| 国产成人精品日本亚洲11| 国产精品三p一区二区| 欧美激情视频一区二区三区| 成人影院在线| 亚洲区成人777777精品| 18成人免费观看视频| 最近免费中文字幕中文高清百度| 老司机免费视频一区二区三区| 99999精品| 91美女蜜桃在线| 在线观看天堂av| 亚洲一区二区三区美女| 黑人精品无码一区二区三区AV| 在线日韩国产精品| 成人1区2区3区| 亚洲三级免费看| www免费在线观看| 欧美有码在线观看视频| 亚洲欧美一级| 精品一区久久久久久| 久久国产亚洲| 成人黄色av片| 精品在线你懂的| 黄色网址在线视频| 中文字幕一区二区三区视频| 伊人国产在线观看| 欧美日本一区二区在线观看| 五月婷婷在线播放| 爱福利视频一区| 性欧美超级视频| 成人免费视频网站| japanese国产精品| 国产综合中文字幕| 国产一区二区h| 国产在线综合视频| 天天色 色综合| 国产精品久久综合青草亚洲AV| 亚洲欧美激情一区| 成年人视频免费在线播放| 国产精品一区专区欧美日韩| 乱中年女人伦av一区二区| 一级黄色片播放| 蜜桃久久av一区| 国产精品揄拍100视频| 亚洲综合成人网| 一区二区www| 亚洲人成绝费网站色www| 美足av综合网| 91九色在线观看| 国产精品99久久久久久动医院| 老司机午夜av| 26uuu成人网一区二区三区| 日韩av综合在线| 日韩精品综合一本久道在线视频| 午夜在线视频| 日韩美女免费视频| 亚洲国产精品嫩草影院久久av| 国产性生活免费视频| 国内精品伊人久久久久av一坑| av网在线播放| 色视频一区二区| 日本韩国精品一区二区| 国产91精品视频在线观看| 久久九九热re6这里有精品| 免费观看亚洲视频| 国产精品系列在线观看| 爱爱视频免费在线观看| 911精品产国品一二三产区| av在线播放免费| 国产精品久久久久77777| 在线日韩网站| 黑鬼大战白妞高潮喷白浆| 久久免费电影网| 无码人妻熟妇av又粗又大| 亚洲一二三在线| 久久精品xxxxx| 亚洲一区二区三区免费观看| 男人的j进女人的j一区| 免费黄色在线网址| 欧美色图在线观看| 日本中文字幕伦在线观看| 国产精品亚洲一区二区三区| 欧美国产美女| 日本r级电影在线观看| 亚洲一区在线观看视频| 国产 日韩 欧美 精品| 57pao国产成人免费| 久久99久久人婷婷精品综合| 国产成人精品视频ⅴa片软件竹菊| 国产欧美日韩不卡| 亚洲天堂网视频| 欧美成人高清视频| 成人18夜夜网深夜福利网| 国产中文字幕在线免费观看| 久久综合色一综合色88| 销魂美女一区二区| 久久韩国免费视频| 日韩在线精品强乱中文字幕| 99久久国产综合精品五月天喷水| 91欧美一区二区| 天堂av免费在线观看| 久久久黄色av| 国产伦精品一区二区三区在线播放 | 亚洲综合伊人久久大杳蕉| 国产精品视频入口| 久久动漫亚洲| 成人高潮免费视频| 亚洲国产精品一区二区久| 电影亚洲精品噜噜在线观看 | 一区二区精品| 欧美丰满美乳xxⅹ高潮www| 91精品免费在线观看| av岛国在线| 亚洲欧洲另类精品久久综合| 成人久久久精品乱码一区二区三区 | 色8久久人人97超碰香蕉987| 91porn在线观看| aaa级精品久久久国产片| 亚洲欧美日韩精品一区二区| 自拍偷拍第9页| 亚洲精品成人久久| 国产精品美女午夜爽爽| 日本熟妇人妻xxxx| 亚洲国产精品成人久久综合一区| 亚洲黄色小说网| 国产精品网站入口| 伊人影院久久| 亚洲 欧美 国产 另类| 亚洲第一网站男人都懂| 婷婷精品久久久久久久久久不卡| 亚洲 欧美 日韩 国产综合 在线| 中文字幕一区二区三区不卡| 无码精品黑人一区二区三区|