不少語言都內置了RPC技術。 Java RMI .NET Remoting 遠古時期,就有不少嘗試:git
定義過程接口 程序員
客戶端使用生成的stub代理對象 github
客戶端生成過程接口的代理對象。markdown
客戶端代理工廠,用JDK動態代理(或者 AOP 實現)便可生成接口的代理對象。 網絡
看框架對協議的支持廣度,若是支持多種協議,就是會靈活變化的,它與具體的服務相關, A服務提供者可能選用的是協議1,B服務提供者可能選用協議2。多線程
從獲取的服務信息中來,所以須要一個服務信息發現者。框架
把發現者設計出來, 要求:可靈活支持多種發現機制
oop
問題: ➢ marshalling和unmarshalling方法該定義怎樣的參數與返回值? ➢ 編組、解組的操做對象是請求、響應,請求、響應的內容是不一樣的。編組、解組兩個方法是否知足?spa
定義框架標準的請求, 響應類線程
消息協議獨立爲一層(客戶端、服務端均須要)
網絡層 發送請求,得到響應
要發起網絡請求,則須知道服務地址
在實現過程當中,協議層涉及一個重要概念
客戶端請求過來了,服務端首先須要經過RPCServer接收請求。
RPCServer接收到客戶端請求後,還須要作哪些工做?
網絡層在RPCServer中提供多線程來處理請求,消息協議層複用客戶端設計的。 (設計一個請求處理類
,來完成網絡層以上的事情。)
RPCServer接收到請求後,將請求交給RequestHandler來處理 RequestHandler調用協議層來解組請求消息爲Request對象,而後調用過程!
➢ RequestHandler如何獲得過程對象? ➢ Request中有什麼? ➢ 服務名、方法名、參數類型、參數值 ➢ 是否須要一個過程註冊模塊?
看看以後的設計
➢ 過程註冊模塊
:讓用戶將他們的過程註冊到RPC框架 ➢ 過程暴露模塊
:想對外發布(暴露)服務註冊、暴露能夠由同一個類實現