自己实现简单的RPC
来源:互联网 发布:产品数据管理软件 编辑:程序博客网 时间:2024/05/22 06:17
1.server
package com.xiaogang.server;public interface IService { public String service(String str); }
package com.xiaogang.server;public class ServiceImpl implements IService{ @Override public String service(String str) { return "ServiceWrappered["+str+"]"+System.currentTimeMillis(); } }
package com.xiaogang.server;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.lang.reflect.Method;import java.net.ServerSocket;import java.net.Socket;import java.util.Arrays;public class ServiceProvider { public static void main(String[] args) { ServerSocket server = null; ObjectOutputStream out = null; try { server = new ServerSocket(8080); Socket socket =null; int numAccept=0; while(numAccept<5){ System.out.println("--------------Service started---------------"); socket = server.accept(); numAccept++; ObjectInputStream input = new ObjectInputStream(socket.getInputStream()); String interfaceName = input.readUTF(); //接口名称 String methodName = input.readUTF(); //方法名称 Class<?>[] parameterType = (Class<?>[]) input.readObject(); //方法类型 Object[] arguments = (Object[]) input.readObject(); //参数列表 System.out.println("server接收到的参数:"+Arrays.toString(arguments)); //根据接口名称获取class Class<?> serviceInterfaceClass = Class.forName(interfaceName); //根据方法名称和参数类型反射得到方法 Method method = serviceInterfaceClass.getMethod(methodName, parameterType); //服务实例化(这里做简单处理,正常应该根据得到的接口名称serviceInterfaceClass获取对应的service,但本demo只提供一个服务) IService service = new ServiceImpl(); //反射执行这个方法 Object result = method.invoke(service, arguments); //写会处理结果 out = new ObjectOutputStream(socket.getOutputStream()); out.writeObject(result); } System.out.println("--------------Service stoped---------------"); } catch (Exception e) { e.printStackTrace(); }finally{ try { out.close(); } catch (IOException e1) { e1.printStackTrace(); } if(server!=null){ try { server.close(); } catch (IOException e) { e.printStackTrace(); } server = null; } } } }
2.client
package com.xiaogang.client;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.lang.reflect.Method;import java.net.Socket;import com.xiaogang.server.IService;public class ClientCaller { public static void main(String[] args) { try { //接口名称 String interfaceName = IService.class.getName(); //接口方法 Method method = IService.class.getMethod("service", java.lang.String.class); //参数 Object[] arguments = {"hello"}; Socket socket = new Socket("10.40.30.200",8080); //发送请求 ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream()); out.writeUTF(interfaceName); out.writeUTF(method.getName()); out.writeObject(method.getParameterTypes()); out.writeObject(arguments); //获取结果 ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream()); Object returnObject = inputStream.readObject(); System.out.println("client recieve: "+returnObject.toString()); } catch (Exception e) { e.printStackTrace(); } } }
阅读全文
0 0
- 自己实现简单的RPC
- 自己实现一个简单的RPC框架
- 自己实现简单RPC功能
- 自己实现简单RPC功能
- 自己实现简单RPC功能
- 简单的RPC实现
- 简单实现的RPC
- 简单的RPC java实现
- 简单的RPC java实现
- 简单的RPC java实现
- 简单的RPC java实现
- RPC的nodejs简单实现
- 编写自己rpc框架——java rpc的实现
- 2.RPC框架的简单实现(定义自己的ldubbo命名空间)
- 分布式学习笔记1通过Java自己实现简单的HTTP RPC框架
- 一个简单的rpc框架的实现
- 一个简单的rpc框架的实现
- 最简单的Rpc框架的实现
- POJ2987: Firing 题解
- RPC远程过程调用协议简述
- Python3.0版本中特定语言的删除
- Linux/Ubuntu校园网下ipv6无法有效上网问题解决办法
- 118. Pascal's Triangle
- 自己实现简单的RPC
- java设计模式--单例模式
- 开发低功耗蓝牙4.0血压计连接与收发数据
- CSU-ACM2017暑期训练1-Debug与STL E
- 耦合所隐藏的信息
- 【C#】在窗口输出字符串
- 精通css 第六章 (1)导航栏
- 百练_4002:谁是你的潜在朋友
- php autoload 应用2