RPC(Remote Procedure Call,远程过程调用),一般用来实现部署在不同机器上的系统之间的方法调用,使得程序能够像访问本地系统资源一样,通过网络传输去访问远端系统资源;对于客户端来说, 传输层使用什么协议,序列化、反序列化都是透明的
为什么要用RPC?
其实这是应用开发到一定的阶段的强烈需求驱动的。
- 如果我们开发简单的单一应用,逻辑简单、用户不多、流量不大,那我 们用不着;
- 当我们的系统访问量增大、业务增多时,我们会发现一台单机运行此系统已经无法承受。此时,我们可以将业务拆分成几个互不关联的应用,分别部署在各自机器上,以划清逻辑并减小压力。此时,我们也可以不需要RPC,因为应用之间是互不关联的。
- 当我们的业务越来越多、应用也越来越多时,自然的,我们会发现有些功能已经不能简单划分开来或者划分不出来。此时,可以将公共业务逻辑抽离出来,将之组成独立的服务Service应用 。而原有的、新增的应用都可以与那些独立的Service应用 交互,以此来完成完整的业务功能。所以此时,我们急需一种高效的应用程序之间的通讯手段来完成这种需求,所以这时候,RPC才是大显身手时候。
其实3描述的场景也是服务化 、微服务 和分布式系统架构 的基础场景。即RPC框架就是实现以上结构的有力方式。
通过手写一个无注册中心的RPC框架,使用JDK动态代理、反射、socket搞定。
因为有些类不管是客户端还是服务端都应该有的,那么我们可以可以把他放在一个api项目里,
api
server端
发布远程服务
处理请求
处理客户端的请求
通过反射调用服务
服务实现类
启动服务端
客户端
创建连接和发起一个远程调用
发起一个异常
创建客户端的远程代理,通过远程代理进行访问,JDK的动态代理
客户端发起连接和请求,
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net