Spark-源码学习-SparkCore-通信服务-架构设计-传输层-服务端
一、概述
RPC 传输层服务端负责接收客户端序列化后的请求数据,同时把响应数据序列化后传给客户端。
二、架构设计
2.1. 服务端引导程序 TransportServerBootstrap
接口 TransportServerBootstrap 定义了服务端引导程序的规范,服务端引|导程序旨在当客户端与服务端建立连接之后,在服务端持
有的客户端管道上执行的引导程序。TransportServer 的构造器中的 bootstraps 是 TransportServerBootstrap 的列表。
2.2. 组件
2.2.1. TransportServer
TransportServer 是 RPC 框架的服务端,可提供高效、低级别的流服务。
三、实现
3.1. TransportServer
3.1.1. 构造器
TransportServer 的构造器中的各个变量如下。
1 | public TransportServer( |
context: 参数传递的TransportContext的引|用。
conf: 指TransportConf, 这里通过调用 TransportContext 的 getConf() 获取。
appRpcHandler: RPC请求处理器RpcHandler。
bootstraps: 参数传递的TransportServerBootstrap列表。
bootstraps 是 TransportServerBootstrap 的列表。
接口 TransportServerBootstrap 定义了服务端引导程序的规范, 服务端引导程序旨在当客户端与服务端建立连接之后,在服务端持有的客户端管道上执行的引导程序
3.1.2. 初始化 TransportServer
NettyRpcEnv 中创建 TransportServer 的代码如下:
1 | private var server: TransportServer = _ |
TransportServer 在此时并未实例化,那么它是何时实例化的🤔️~
TransportContext.createServer() 方法用于创建 TransportServer, TransportServer 的构造器中调用了 init 方法,init 方法用于对 TransportServer 进行初始化。
1 | public TransportServer createServer(int port, List<TransportServerBootstrap> bootstraps) { |
创建 bossGroup 和 workerGroup
创建一个汇集 ByteBuf 但对本地线程缓存禁用的分配器。
调用 Netty 的 API 创建 Netty 的服务端根引导程序并对其进行配置。
为根引导程序设置管道初始化回调函数,此回调函数首先设置 TransportServerBootstrap 到根引导程序中,然后调用
TransportContext 的 initializePipeline 方法初始化 Channel 的 pipeline
给根引导程序绑定Socket的监听端口,最后返回监听的端口