自定义RPC框架设计思路

来源:互联网 发布:webdriver js 编辑:程序博客网 时间:2024/06/05 17:15

RPC简介

RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

框架设计目标

如图所示,客户端要调用orderService的createOrder方法,但是客户端本身没有orderService的实现,这个实现在服务器上面。现在要求通过我们的框架,客户端和服务器上面的代码只要加上注释就可以实现客户端调用服务器上的代码。

设计思路

服务器端

服务器端的函数加上注解后要变成一个服务,这个服务必须是一个socket服务,监听客户端的请求。

程序启动时通过Spring框架可以拿到这些注解,然后可以通过ApplicationContext可以获得所有的服务及具体实现类的列表,放入到一个map中。

然后可以把这个map传递给SocketServer。SocketServer负责根据客户端传入的serviceName通过反射机制调用具体的服务,然后返回给客户端。

SocketServer通过Spring机制启动,不需要用户介入。

客户端

给标注autoWired的对象注入一个动态代理,调用方法时可以拿到具体的方法名和args,然后通过socket请求SocketServer的相应服务,然后将服务器返回的结果返回调用方。

客户端如何知道服务端的地址在哪呢?可以通过ZooKeeper集群注册。

总体设计图

涉及的技术

ZooKeeper、动态代理、反射、netty、nio、Spring

继续学习。

0 0
原创粉丝点击