Netty源码分析:accept

本文深入分析Netty源码中的accept过程,首先介绍了NioServerSocketChannelConfig的作用,特别是maxMessagesPerRead字段在处理客户端连接时的意义。接着,详细探讨了NioEventLoop如何处理OP_ACCEPT事件,包括非阻塞模式下的accept操作,以及如何将新连接交给Worker线程处理。最后,总结了Boss线程和Worker线程在accept和读写事件处理中的分工。
摘要由CSDN通过智能技术生成

Netty源码分析:accept

在介绍accept之前,先介绍下NioServerSocketChannelConfig这个类,为什么先介绍这个类呢,这是因为:在accept客户端连接时会使用该类的maxMessagesPerRead这个字段,该字段的含义为:每次读的最大信息,Netty中将accept客户端连接也认为是一种读操作。对于accept客户端连接的这种读,利用该字段表示的是一次能够接受的最大连接数。目前这里只关注这一点。

1、NioServerSocketChannelConfig

在NioServerSocketChannel的构造函数中,我们看到会实例化一个NioServerSocketChannelConfig对象,本篇博文就介绍下这个类的构造函数做了哪些工作。

    public NioServerSocketChannel(ServerSocketChannel channel) {
        super(null, channel, SelectionKey.OP_ACCEPT);
        config = new NioServerSocketChannelConfig(this, javaChannel().socket());
    }

NioServerSocketChannelConfig是NioServerSocketChannel的私有内部类。继承体系结构如下:

    private final class NioServerSocketChannelConfig  extends DefaultServerSocketChannelConfig {
   
        private NioServerSocketChannelConfig(NioServerSocketChannel channel, ServerSocket javaSocket) {
            super(channel, javaSocket);
        }

        @Override
        protected void autoReadCleared() {
            setReadPending(false);
        }
    } 

该类中就有一个构造函数,以及重写了父类 DefaultServerSocketChannelConfig 的autoReadCheared()方法, 该方法通过调用setReadPending(false)方法将DefaultServerSocketChannelConfig的字段readPending设为false。

    protected void setReadPending(boolean readPending) {
        this.readPending = readPending;
    } 

继续看 DefaultServerSocketChannelConfig 的构造函数:

    public DefaultServerSocketChannelConfig(ServerSocketChannel channel, ServerSocket javaSocket) {
        super(channel);
        if (javaSocket == null) {
            throw new NullPointerException("javaSocket");
        }
        this.javaSocket = javaSocket;
    } 

DefaultChannelConfig

    public DefaultChannelConfig(Channel channel) {
        if (channel == null) {
            throw new NullPointerException("channel");
        }
        this.channel = channel;

        if (channel instanceof ServerChan
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值