Vue中的diff演算法深度解析
阿新 • • 發佈:2022-12-07
這個隨筆是對徐葳(b站號:大資料1024_徐葳)老師關於RPC部分講解的一個整理。
一、RPC含義
1、RPC全稱是Remote Procedure Call遠端程式呼叫,顧名思義就是通過網路向遠端計算機請求服務,而無需知道底層網路技術的協議
2、RPC是典型的CS架構,提供服務的遠端計算機充當伺服器,請求服務的機子是客戶端。本質是跨機器,跨程序的一種協議,首先,客戶端傳送一個有程序引數的呼叫資訊到服務程序,等待應答訊息,服務機從啟動後一直阻塞直到收到客戶機的呼叫資訊,獲得程序引數,計算結果,傳送答覆訊息。
3、RPC是Hadoop架構通訊的基礎,正常啟動hadoop下(不包含yarn),有三個程序:NameNode,DataNode,SecondaryNameNode,相應的有三個RPC協議,ClientProtocol(HDFS客戶端與NameNode通訊介面),DataNodeProtocol(DataNode與 NameNode通訊介面),NameNodeProtocol(SecondaryNameNode與NameNode通訊介面)
二、RPC簡單實現
2.1自定義介面
點選檢視程式碼
public interface MyProtocol extends VersionedProtocol {
long versionID =12345L;
String hello(String name);
}
2.2介面實現類
點選檢視程式碼
public class MyProtocolImp implements MyProtocol{ @Override public String hello(String name) { System.out.println("hello方法被呼叫了"); return "hello "+name; } @Override public long getProtocolVersion(String s, long l) throws IOException { return versionID; } @Override public ProtocolSignature getProtocolSignature(String s, long l, int i) throws IOException { return new ProtocolSignature(); } }
2.3伺服器端程式碼
點選檢視程式碼
public class MyServer { public static void main(String[] args) throws Exception{ //建立RPC Server構建器 Configuration cof = new Configuration(); RPC.Builder builder = new RPC.Builder(cof); //設定構建器相關引數 builder.setBindAddress("localhost") .setPort(1234) .setProtocol(MyProtocol.class) //設定RPC介面 .setInstance(new MyProtocolImp()); //設定RPC介面實現類 // 構建RPC Server RPC.Server server = builder.build(); //啟動 server.start(); System.out.println("伺服器啟動"); } }
2.4客戶端程式碼
點選檢視程式碼
public class MyClient {
public static void main(String[] args) throws Exception{
//通過Socket連線PRC Server
InetSocketAddress addr = new InetSocketAddress("localhost", 1234);
//獲得RPC Server代理
Configuration conf = new Configuration();
MyProtocol proxy = RPC.getProxy(MyProtocol.class, MyProtocol.versionID, addr, conf);
//呼叫對應的服務
String res = proxy.hello("joseph");
System.out.println("RPC客戶端接收到的結構: "+res);
}
}