netty服务端开发-绑定监听

上一篇文章介绍了服务端的消息处理,这篇文章则主要介绍端口监听、连接的建立和消息处理类的注册使用等,直接贴上demo代码

package com.jd.time.server;

import com.jd.time.handler.TimeServerHandler;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;


/**
 * Created by caozhifei on 2015/4/11.
 */
public class TimeServer {
    public void bind(int prot) throws Exception {
        //配置服务端的NIO线程组
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        try {
            ServerBootstrap bootstrap = new ServerBootstrap();
            bootstrap.group(bossGroup, workerGroup)
                    .channel(NioServerSocketChannel.class)
                    .option(ChannelOption.SO_BACKLOG, 1024)
                    .childHandler(new ChildChannelHandler());
        } finally {
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }
    }

    private class ChildChannelHandler extends ChannelInitializer {

        @Override
        protected void initChannel(SocketChannel ch) throws Exception {
            ch.pipeline().addLast(new TimeServerHandler());
        }
    }

    public static void main(String[] args) {
        int port = 8888;
        try {
            new TimeServer().bind(port);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

首先是先创建了两个NioEventLoopGroup实例,NioEventLoopGroup是个线程组,它包含了一组NIO线程,专门用于网络事件的处理,实际上他们就是Reactor线程组,这里创建两个的原因是一个用于服务端接收客户端的连接,另一个用于进行ScoketChannel的网络读写,然后创建ServerBootstrap对象,他是Netty用于启动NIO服务端的辅助启动类,目的就是降低服务端的开发负责度,然后调用group方法将两个线程组绑定到ServerBootstrap。然后配置NioServerSocketChannel的TCP参数,此处将他的backlog设置为1024,最后绑定I/O事件的处理类,ChildChannelHandler,他的作用类似Reactor模式中的handler类,主要用于处理网络I/O事件。

服务端启动辅助类配置完成后,调用他的bind方法绑定监听端口,随后调用他的同步阻塞方法sync等绑定操作完成,完成之后netty会返回一个ChannelFuture,他的功能类似与JDK的java.util.concurrent.Future,主要用于异步操作的通知回调,然后在使用sync方法进行阻塞,等待服务端链路关闭之后退出main函数,最后在shutdownGracefully进行所有资源的释放。

你可能感兴趣的:(netty学习之路)