Java实现简单的RPC调用(基于TCP协议)
来源:互联网 发布:tracert 路由节点优化 编辑:程序博客网 时间:2024/05/02 00:04
SayHelloService接口
public interface SayHelloService {public String sayHello(String arg); }
SayHelloServiceImpl实现类
public class SayHelloServiceImpl implements SayHelloService{@Overridepublic String sayHello(String arg) {return "Hello " + arg;}}
服务端 生产者
public class Provider {public static void main(String[] args) {try {ServerSocket server= new ServerSocket(10808);while (true) {Socket socket = server.accept();//读取服务信息ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());String interfaceName = inputStream.readUTF();//接口名称String methodName = inputStream.readUTF();//方法名称Class<?>[] parameterTypes = (Class<?>[]) inputStream.readObject();//参数类型Object[] parameters = (Object[]) inputStream.readObject();//参数对象Class serviceInterfaceClass = Class.forName(interfaceName);//Object service = services.get(interfaceName); //服务端将事先实例化好的服务放在services这个Map中,通过interfaceName取出使用Object service = new SayHelloServiceImpl();//演示代码直接new了一个对象来使用//获取要调用的方法Method method = serviceInterfaceClass.getMethod(methodName, parameterTypes);Object result = method.invoke(service, parameters);ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream());//将执行结果返回给调用端outputStream.writeObject(result);System.out.println("Parameters from comsumer: " + parameters);}} catch (Exception e) {e.printStackTrace();}finally {//关闭资源...}}}
调用端 消费者
public class Consumer {public static void main(String[] args) {//接口名称String interfaceName = SayHelloService.class.getName();try {//需要执行的远程方法Method method = SayHelloService.class.getMethod("sayHello", java.lang.String.class);//需要传递到远程端的参数Object[] agrs = {"world"};Socket socket = new Socket("127.0.0.1", 10808);//将方法名称和参数传递到远端ObjectOutputStream outputStream = new ObjectOutputStream(socket.getOutputStream());outputStream.writeUTF(interfaceName);//接口名称outputStream.writeUTF(method.getName());//方法名称outputStream.writeObject(method.getParameterTypes());outputStream.writeObject(agrs);//从远端读取方法的执行结果ObjectInputStream inputStream = new ObjectInputStream(socket.getInputStream());Object result = inputStream.readObject();System.out.println("Consumer result:" + result);} catch (Exception e) {e.printStackTrace();}finally{//关闭资源...}}}
基于TCP协议实现的RPC,能灵活地对协议字段进行定制,减少网络传输字节数,降低网络开销,提高性能,实现更大的吞吐量和并发数。但是需要更多地关注底层复杂的细节,实现的代价更高,且由于所定义协议自身的局限性,难以得到平台厂商和开源社区的支持,较难实现跨平台的调用。
本文出自 “优赛工作室” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/1743795
0 0
- Java实现简单的RPC调用(基于TCP协议)
- 基于TCP和HTTP协议的RPC简单实现
- 基于TCP和HTTP协议的RPC简单实现
- 基于TCP的RPC简单实现
- 基于TCP协议的RPC
- 基于TCP的RPC调用
- 系统间通信:基于TCP协议的RPC实现范例
- 系统间通信:基于TCP协议的RPC实现范例
- 基于TCP实现的最简单RPC demo
- 基于TCP协议的简单通信实现
- 基于Tcp协议的简单Socket通信实例(JAVA)
- 基于Tcp协议的简单Socket通信实例(JAVA)
- netty+zk实现简单的rpc调用(基于传输层)
- Java实现一个简单的RPC框架(二) 协议
- Java实现一个简单的RPC框架(一) 本地调用
- 基于TCP的RPC
- 实现基于TCP/IP协议的简单Client/Server程序
- AVA实现基于Tcp协议的简单Socket通信实例
- Android View 测量流程(Measure)完全解析
- 队列的链式表示和实现
- eclipse启动Tomcat时报错:严重: IOException while loading persisted sessions: java.io.EOF
- HDU 1492 The number of divisors(约数) about Humble Numbers(数论题目要知道定理呀....)
- 投资银行的20个Java面试题
- Java实现简单的RPC调用(基于TCP协议)
- Java使用memcache示例
- Picasso源码学习
- JMS初探-Active MQ
- Linux安装JDK
- JMS进阶-Spring整合Active MQ
- JAVA多线程和并发基础面试问答
- 40个Java多线程问题总结(转)
- 搬单小工具总结