netty源码分析(一)-启动

对于netty的理解,首先要熟悉NIO相关的概念,可以参考学习这里:Java NIO

以NioServerSocket实现为例,netty的启动过程分析:

netty的启动入口,我们一般会这样配置:

    ChannelFactory serverChannelFacory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newCachedThreadPool());
    ServerBootstrap bootstrap =  new ServerBootstrap(serverChannelFacory);
    bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
        @Override
        public ChannelPipeline getPipeline() throws Exception {
            ChannelPipeline pipeline = Channels.pipeline();
            pipeline.addLast("decoder", new HttpRequestDecoder());
            pipeline.addLast("encoder", new HttpResponseEncoder());
            pipeline.addLast("handler", new YourHandler());
            return null;
        }
    });
    bootstrap.bind(new InetSocketAddress(8080));//启动入口

很明显,入口自然就是bootstrap.bind(),bind方法内会处理下面一部分主要的操作

    public Channel bind(final SocketAddress localAddress) {
        ......
        ChannelHandler binder = new Binder(localAddress, futureQueue);
        ChannelHandler parentHandler = getParentHandler();

        ChannelPipeline bossPipeline = pipeline();
        bossPipeline.addLast("binder", binder);
        if (parentHandler != null) {
            bossPipeline.addLast("userHandler", parentHandler);
        }

        Channel channel = getFactory().newChannel(bossPipeline);
        ......
    }

getFactory()获取的自然是我们前面new ServerBootStrap时的参数NioServerSocketChannelFactory对象,newChannel()的操作是new一个NioServerSocketChannel的对象并返回,传的参数是前面的bossPipeline。所以可以理解这个是针对boss线程的pipeline操作,对应的handler只有binder

    NioServerSocketChannel(
            ChannelFactory factory,
            ChannelPipeline pipeline,
            ChannelSink sink) {

        super(factory, pipeline, sink);

        try {
            socket = ServerSocketChannel.open();
        } catch (IOException e) {
            <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值