Netty服务端源码阅读笔记(一)服务端代码和概念介绍

16 篇文章 0 订阅
Netty4 NIO 的,其网络通信模型采用的是 Reactor,属于同步 非阻塞 IO 的网络通信模型。
Netty5 AIO 的,其网络通信模型采用的是 Proactor,属于异步 非阻塞 IO 的网络通信模型。

本次分析的是NIO

图是开课吧的

parentGroup处理连接连接,childGroup处理读写事件,每个Group中存在多个EventLoop,一个EventLoop绑定一个Selector和多个channel,一个EventLoop内部绑定一个线程来进行select监测就绪事件

 

服务端代码如下

       EventLoopGroup parentGroup = new NioEventLoopGroup();
        EventLoopGroup childGroup = new NioEventLoopGroup();
        try {
            ServerBootstrap bootstrap = new ServerBootstrap();
            bootstrap.group(parentGroup, childGroup)
                    // 用于指定当Server的连接请求处理线程全被占用时,
                    // 临时存放已经完成了三次握手的请求的队列的长度。
                    // 默认是50
                    .option(ChannelOption.SO_BACKLOG, 1024)
                    // 指定使用心跳机制来保证TCP长连接的存活性
                    .childOption(ChannelOption.SO_KEEPALIVE, true)
                    .channel(NioServerSocketChannel.class)
                    .childHandler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ChannelPipeline pipeline = ch.pipeline();
                            pipeline.addLast(new ObjectEncoder());
                            pipeline.addLast(new ObjectDecoder(Integer.MAX_VALUE,
                                    ClassResolvers.cacheDisabled(null)));
                            pipeline.addLast(new RpcServerHandler(registerMap));
                        }
                    });
            ChannelFuture future = bootstrap.bind(8888).sync();
            System.out.println("服务端已启动,监听的端口为:8888");
            future.channel().closeFuture().sync();
        } finally {
            parentGroup.shutdownGracefully();
            childGroup.shutdownGracefully();
        }
Channel
socket的封装
 
EventLoop
接口,本文实现为NioEventLoop,其他还有 EpollEventLoop等,为每个Channel分配一个EventLoop,处理所有请求事件,一个Channel绑定一个EventLoop,一个EventLoop可以绑定多个Channel,内部绑定一个多路复用器Selector和一个线程,线程用来死循环进行select和执行任务队列中的任务
 
NioEventLoopGroup
EventLoopGroup是个接口,实现类除了NioEventLoopGroup还有 EpollEventLoopGroup等,是一个EventLoop的池,真正处理都是根据算法选择一个EventLoop进行操作
 
ServerBootStrap
配置server端代码,关联各个组件,启动入口
 
ChannelHandler、ChannelPipeline
处理器处理消息,各个处理器依次被添加到Pipeline的处理器列表,按添加的顺序对消息进行处理
 
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值