1. 程式人生 > 其它 >Vue中的diff演算法深度解析

Vue中的diff演算法深度解析

這個隨筆是對徐葳(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);

    }
}