欢迎关注全是干货的公众号
。
1 从使用者考虑
用,用户使用RPC框架开发流程时需要做什么?流程接口服务端实现定义一个代理对象,该代理对象使用生成的stub代理对象
2 设计客户端
客户端生成流程接口,该代理对象使用JDK动态代理生成接口
思考
1、在ClientStubInvocationHandler中应该完成什么?
2、谁将请求内容分组为信息?
3、消息协议是固定的吗? 那和什么有关? 从对框架协议的支持范围来看,如果支持多个协议,则会发生灵活的变化。 它与具体的服务有关,a服务提供者可能选择协议1,b服务提供者可能选择协议2。
4、某服务用的是什么信息协议? 这个信息是从哪里来的? 从取得的服务信息中,需要服务信息发现者。
设计发现者,要求:能够灵活支持多种发现机制
5、我们想支持多样化的协商,我们班该怎么设计呢? 面向接口、策略模式和组合
问题: marshalling和unmarshalling方法应该定义什么样的参数和返回值? 分组、解组的操作对象是请求、响应,请求、响应的内容不同。 分组、解组两种方法满足吗?
客户端协议层的设计
定义框架标准的要求并回复类。
将协议层扩展到四个消息协议,使其独立于一个层(客户端、服务端都需要)。
要使网络层发送请求、得到响应并启动网络请求,必须知道服务地址
客户机的类图整体按照类图设计客户机,并填写代码! 请看ClientStubProxyFactory核心类的代码示例!
在实施过程中,协议层涉及到一个重要的概念
参数序列化,反序列
3 设计服务端
3.1RPC服务器客户请求了。 服务端必须首先通过RPC服务器接收请求。
电脑服务器
3.2思考
在RPC服务器收到客户端请求后,应该执行什么任务?
网络层通过RPC服务器提供多线程来处理请求,消息协议层复用客户端设计的。 设计请求处理系统,使之能做网络层以上的事情。 )
3.3请求处理程序
RPC服务器接收到请求后,将请求传递给请求处理程序以处理请求处理程序调用协议层,将请求消息解组为请求对象,然后调用过程。
人性的拷问
请求处理程序如何获取进程对象? Request有什么? 服务名称、方法名称、参数类型和参数值是否需要流程注册模块?
请看之后的设计
进程注册模块:使用户向RPC框架进程暴露模块3360注册自己的进程,希望向外部公开(暴露)的服务的注册、暴露可以在同一类实现
用RPC服务器实现网络层: Netty,使用RequestHandlerServiceRegister模块实现服务注册、公开。 用请求处理程序实现消息协议处理、过程调用
代码实现
首先,用户需要设置你的端口和协议哦。