Netty

头像
棘丶
    阅读 2 分钟

    netty服务端的初始化

    //类加载初始化方法
    @PostConstruct
    public void start() {
        try {
            //创建netty服务器对象
     ServerBootstrap bootstrap = new ServerBootstrap();
     bootstrap.option(ChannelOption.SO_BACKLOG, 1024);
     bootstrap.option(ChannelOption.TCP_NODELAY, true);
     bootstrap.group(boss, work);
     bootstrap.channel(NioServerSocketChannel.class);
     bootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
     bootstrap.childHandler(myChannelInitializer);
     logger.info("netty服务器启动");
     ChannelFuture future = bootstrap.bind(port).sync();
     //ChannelFuture future2 = bootstrap.bind(port2).sync();
     } catch (InterruptedException e) {
            logger.error("服务器启动失败");
     //当服务器启动失败得时候由netty的调度功能来关闭netty的服务器
     work.shutdownGracefully();
     boss.shutdownGracefully();
     }
    }

    1.(ChannelOption.SO_BACKLOG, 1024 )
    表示标识当服务器请求处理线程全满时,用于临时存放已完成[三次握手]的请求的队列的最大长度。如果未设置或所设置的值小于1,Java将使用默认值为50
    2.(ChannelOption.TCP_NODELAY, true)
    TCP_NODELAY就是用于启用或关于[Nagle算法],如果要求高实时性,有数据发送时就马上发送,就将该选项设置为true关闭[Nagle算法],如果要减少发送次数减少网络交互,就设置为false等累积一定大小后再发送。默认为false。
    3.bootstrap.group(boss, work);
    是初始化两个线程,一个线程负责接受新的连接,一个负责处理读写;是开启了;
    核心思想:轮询,没有连接立刻返回不要耽误其他的客户端连接,不会阻塞;一个线程不会浪费资源;
    4.bootstrap.channel(NioServerSocketChannel.class);
    声明利用反射机制来获取NioServerSocketChannel得到实例
    5.bootstrap.childOption(ChannelOption.SO_KEEPALIVE, true);
    当设置为true的时候,TCP会实现监控连接是否有效,当连接处于空闲状态的时候,超过了2个小时,本地的TCP实现会发送一个数据包给远程的 socket,如果远程没有发回响应,TCP会持续尝试11分钟,知道响应为止,如果在12分钟的时候还没响应,TCP尝试关闭socket连接
    6.bootstrap.childHandler(myChannelInitializer);
    初始化客户端Handler~~~~
    7.ChannelFuture future = bootstrap.bind(port).sync()
    为服务端netty绑定端口


    棘丶
    12 声望1 粉丝