概述
- 作用
- 使用示例
- 源码执行流程分析
作用
- 机器之间相互通信
使用示例
- 前言:hadoop 0.1.0 版本,Myprocotol类为传送的数据类型类 server端类 client 端类
- Myprocotol 类
public interface MyProtocol { public String line(String s); }
- Server端
public class MyServer implements MyProtocol{ private Server server; public MyServer(){ try { server=RPC.getServer(this, 9090, new Configuration()); server.start(); server.join(); } catch (Exception e) { e.printStackTrace(); } } @Override public String line(String s) { System.out.println("This Mothed is invoke..."); return s+" yxj VMware Workstation AES encryption."; } public static void main(String[] args) { new MyServer(); } }
- Client 类
public class MyClient{ private MyProtocol proxy; public MyClient(){ InetSocketAddress addr=new InetSocketAddress("hadoop1",9090); proxy=(MyProtocol)RPC.getProxy(MyProtocol.class, addr, new Configuration()); } public void xyz(String s) { System.out.println(proxy.line(s)); } public static void main(String[] args) { MyClient client=new MyClient(); client.xyz("yy xx "); } }
- 使用:分别启动 MyServer 和 MyClient 即可
源码执行流程分析
- Client Server RPC 所有类列表
- 问:Client 即为 Client,Server 即为 Server 为什么要 RPC 类?
- 答:封装。考虑机器A 机器B,A 既可能作为客户机访问B,也可能作为服务器为B服务。故,用RPC来封装 Client 与 Server。
- 我精简后的代码,只有 Client 与 Server 无 RPC,框图如下:
- 精简后的代码如下
- Client 端
- 数据类:MyProtocol 类
- 入口类:MyClient 类
- Client入口类:SubstanceClient 类
- Client 类
- 全部代码如下:
- Client 端
//代码太多,未贴出
- Server 端
- 数据格式类:Myprotocol 类
- Server启动类:MyServer 类
- Server入口类:SubstanceServer 类
- Server实体类:Server 类
- Server 端
//代码太多,未贴出
- 流程图
- Client 端流程图
- Server 端流程图