一、RPC(全拼:Remote Procedure Call)遠程過程調用協議,是一種經過網絡從遠程電腦程序上請求服務,而不須要了解底層網絡技術的協議。RPC協議假定某些傳輸協議的存在,例如http或TCP,爲通訊程序之間攜帶信息數據。在OSI網絡通訊模型中,RPC跨越了傳輸層和應用層使得RPC在開發包活網絡分佈式多程序在內的應用程序時更加的方便,容易。服務器
RPC採用客戶機/服務器模式。請求程序就是一個客戶機,而服務提供程序就是一個服務器。首先,客戶機調用進程發送一個有進程參數的調用信息到服務進程,而後等待應答信息。在服務端進程保持睡眠狀態直到調用信息的到達爲止。當一個調用信息到達,服務器得到進程參數,計算結果,發送答覆信息,而後等待下一個調用信息的到來,最後客戶端調用進程接收答覆信息,得到進程結果,而後調用執行繼續進行。網絡
二、源碼例子分佈式
Interface:ide
1 public interface Barty{ 2 public static final long versionID = 10010; 3 public String sayHello(String name); 4 }
RPCServer:ui
public class RPCServer implements Barty{ public static void main(String[] args) throws Exception{ Server server = new RPC.Builder(new Configuration()) .setInstance(new RPCServer()) .setBindAddress("192.168.8.100") .setPort(5566) .setProtocol(Barty.class) .build(); server.start(); } @Override public String sayHello(String name){ return "Hello~"+name; } }
RPCClient:spa
public class RPCClient{ public static void main(String[] args){ Barty proxy = RPC.getProxy(Barty.class,10010 ,new InetSocketAddress("192.168.8.100",9527) ,new Configuration()); String sayHello = proxy.sayHello("World"); System.out.println(sayHello); } }