启动时,调用NamesrvController.initialize()方法时实例化了NettyRemotingServer对象。所以,先分析此构造函数做了什么。
NettyRemotingServer(final NettyServerConfig nettyServerconfig,final ChannelEventListener channelEventListener),构造函数。
1.调用父构造函数初始化one-way和异步发送模式的信号量。
2.实例化Netty的ServerBootstrap类。
3.将构造函数传入的参数赋值给NettyRemotingServer的属性。
4.通过NettyServerConfig中的serverCallBackExecutorThreads属性值获取线程数启动NettyRemotingServer.publicExecutor线程池。
5.初始化NettyRemotingServer.eventLoopGroupBoss,此属性为Netty的EventLoopGroup类,线程数为1。
6.判断是否是linux系统且使用了epoll,如果使用了epoll则初始化NettyRemotingServer.eventLoopGroupSelector时的实现类为EpollEventLoopGroup,如果没有使用则使用NioEventLoopGroup初始化。
7.如果使用了安全套件层就创建ssl上下文。
NamesrvController.start():
此方法实际上是调用了NettyRemotingServer.start()。
1.创建一个处理耗时任务的线程组DefaultEventExecutorGroup。
2.启动Netty服务端,握手,心跳检测,编码,解码,Netty的链接管理,Netty的服务处理都使用步骤1的线程组。
3.监听相应事件。
4.处理过期的请求。