java rpc

这两天看公司的一个server的源码。

然后看了下里面的rpc实现,感觉很有意思。

大概实现一个rpc工具需要做如下工作:

1、定义序列化的对象,用于在client和server之间传递(接口的参数可以是序列化的,也可以把所有信息封装到一个可序列化对象当中进行传递)

比如:有接口ISample,方法有test(T1 x1, T2 x2)

你可以选择设置T1和T2为可序列化的,client端就可以直接通过代理调用这个方法

也可以如下:test(Invocation invo)->test(T1 X1,T2 X2)

传递的是封装好的可序列化的对象

2、选择io模式,是bio还是nio。当然现在大部分都是nio了

3、定义client和server的结构。这时候涉及动态代理。

4、server端要存储一个map:保存接口和对应的实现类的hash关系。

5、在server初始化的时候,需要传递被代理的对象,同时放到4中的map中

6、client获取动态代理的时候只需要传递接口的class就行,server会通过map去查询被代理实例

7、client中要实现以下socket,在执行代理的时候,连接到remote server

当然,其实通过http直接调用也是一种rpc,这里不做介绍了

时间: 2025-01-16 09:39:12

java rpc的相关文章

java RPC系列之二 HTTPINVOKER

java RPC系列之二  HTTPINVOKER 一.java RPC简单的汇总 java的RPC得到技术,基本包含以下几个,分别是:RMI(远程方法调用) .Caucho的Hessian 和 Burlap .Spring的基于HTTP的远程服务.以及使用JAX-RPC和JAX-WS的Web服务.本文主要介绍spring的httpinvoker的基本的配置实现. 二.Spring的httpinvoker的配置实现 基本步骤:       1.定义好服务端需要提供的接口方法(客户端调用的接口):

RPC学习----Thrift快速入门和Java简单示例

一.什么是RPC? RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据.在OSI网络通信模型中,RPC跨越了传输层和应用层.RPC使得开发包括网络分布式多程序在内的应用程序更加容易. 二.什么是Thrift? thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和

远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)

RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果.这个请求包括一个参数集和一个文本集,通常形成"classname.methodname"形式.优点是跨语言跨平台,C端.S端有更大的独立性,缺点是不支持对象,无法在编译器检查错误,只能在运行期检查. Web Service Web Service提供的服务是基于web容器的,底层使用http协议,类似一个远程的服务提供者,比如天气预报服务

Tomcat6.0+Jdk1.5+Axis1.3搭建java webservice环境,并使用c#调用该服务。

java jdk:jdk1.5.0_17 下载网址:http://pan.baidu.com/s/1gdmAkgV tomcat 6.0 下载地址:http://tomcat.apache.org/download-60.cgi Axis1.3(注意现在已经版本已经是Axis2,而我们这里使用的是Axis1.x), Axis1.x运行环境要求低于jdk1.6(不包含jdk1.6),tomcat版本低于6.0(包含6.0): 下载地址:http://pan.baidu.com/s/1gdmAkgV

远程通信(RPC,Webservice,RMI,JMS、EJB、JNDI的区别)对比

总结这些概念都是易混淆,最基本概念定义复习和深入理解,同时也是架构师必备课程 RPC(Remote Procedure Call Protocol) RPC使用C/S方式,采用http协议,发送请求到服务器,等待服务器返回结果.这个请求包括一个参数集和一个文本集,通常形成"classname.methodname"形式.优点是跨语言跨平台,C端.S端有更大的独立性,缺点是不支持对象,不支持异步调用,无法在编译器检查错误,只能在运行期检查. Web Service Web Service

Java 远程通讯技术及原理分析

在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI.MINA.ESB.Burlap.Hessian.SOAP.EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了. 1 基本原理 要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从

Java[2] 分布式服务架构之java远程调用技术浅析(转http://www.uml.org.cn/zjjs/201208011.asp)

转自:http://www.uml.org.cn/zjjs/201208011.asp 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI.MINA.ESB.Burlap.Hessian.SOAP.EJB和JMS等,这些名词之间到底是些什么关系呢,它们背后到底是基于什么原理实现的呢,了解这些是实现分布式服务框架的基础知识,而如果在性能上有高的要求的话,那深入了解这些技术背后的机制就是必须的了,在这篇blog中我们将来一探究竟,抛

利用Java编写简单的WebService实例

使用Axis编写WebService比较简单,就我的理解,WebService的实现代码和编写Java代码其实没有什么区别,主要是将哪些Java类发布为WebService.下面是一个从编写测试例子到发布WebService,以及编写测试代码的过程介绍. 本例子的WebService提供了两个方法,分别是sayHello和sayHelloToPerson,第一个只是返回一个"Hello"字符串,没有参数,第二个函数接受一个字符串作为参数,返回"Hello 参数值",

java rmi浅谈

首先比较下RPC和RMI的差别: 首先java提供了RMI的api,jdk1.5之后虚拟机自动生成两个类:存根类stub和骨架类skelton. stub是给客户端的,当客户端调用远程对象的一个方法时,实际上是调用本地存根对象的相应方法.skelton负责在服务端为远程对象接受客户端的请求.RMI必须要有JVM支持,所以,如果C,S都使用java开发,可以考虑使用RMI. RPC可以跨语言,客户端请求参数中就带有需要调用的类,方法及参数 -----------------------------