美文网首页
Netty (三)异步模型

Netty (三)异步模型

作者: 南园故剑00 | 来源:发表于2020-06-11 13:57 被阅读0次

package com.sgg.netty.taskQueue;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
 * @description:
 * @date : 2020/6/7 18:23
 * @author: zwz
 */
public class NettyServerScheduleTaskQueueAsync {
    public static void main(String[] args) throws InterruptedException {
        //创建BossGroup和WorkerGroup
        //1. 创建两个线程组
        //2. bossGroup只是处理连接请求,真正的和客户端业务处理,会交给workerGroupo完成
        //3. 两个都是无限循环
        //4. bossGroup 和 workGroup 含有的子线程的个数
        //默认实际 CPU 核数*2=8。在不传参数的情况下有8个 线程。我的24个线程
        EventLoopGroup bossGroup = new NioEventLoopGroup(1);
        EventLoopGroup workerGroup = new NioEventLoopGroup();

        //创建服务器端的启动对象,配置参数
        ServerBootstrap bootstrap = new ServerBootstrap();
        try {
            //使用链式编程设置
            bootstrap.group(bossGroup, workerGroup)
                    .channel(NioServerSocketChannel.class)  //使用NioServerSocketChannel作为服务器的通道实现
                    .option(ChannelOption.SO_BACKLOG, 128) //设置线程队列的连接个数
                    .childHandler(new ChannelInitializer<SocketChannel>() { //创建一个通道测试对象-匿名对象
                        //给pipeline设置处理器
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            //可以使用一个集合管理socketChannel,再推送消息,可以将业务加入到各个
                            //channel对应的NIOEventLoop的taskQueue或者scheduleTaskQueue
                            System.out.println("客户SocketChannel hashCode=" + ch.hashCode());
                            ch.pipeline().addLast(new NettyServerScheduleTaskQueueHandler());
                        }
                    }); //给我们的 workerGroup 的EventLoop对应的管道设置处理器

            System.out.println("服务器准好了");

            //绑定一个端口并同步,生成一个 ChannelFuture 对象
            //启动服务器
            ChannelFuture channelFuture = bootstrap.bind(6668).sync();

            //给ChannelFuture注册监听器,监控我们关心的事件
            channelFuture.addListener(new ChannelFutureListener() {
                @Override
                public void operationComplete(ChannelFuture future) throws Exception {
                    if (future.isSuccess()) {
                        System.out.println("监听端口成功");
                    } else {
                        System.out.println("监听端口失败");
                    }
                }
            });

            //对关闭通道进行监听
            channelFuture.channel().closeFuture().sync();
        } finally {
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();
        }
    }
}

相关文章

  • Netty (三)异步模型

  • Netty是什么

    本文基于Netty4.1展开介绍相关理论模型,使用场景,基本组件、整体架构 Netty简介 Netty是 一个异步...

  • netty

    netty 高性能,异步,事件驱动库 Unix io模型 阻塞io 非阻塞io,netty主要就是基于epoll的...

  • Netty原理(四)Netty异步模型

    异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的组件在完成后,通过状态、...

  • Netty EventLoop与IO模型整理

    netty示例 maven依赖 echo服务器示例 echo服务器测试 IO模型 BIO模型 伪异步IO NIO模...

  • netty 入门杂谈

    java io 模型一共分为4种 传统IO 伪异步IO NIO AIO 介绍 netty是一个高性能,异步事件驱动...

  • Netty异步回调模式-Future和Promise剖析

    学习目标 为什么了解Netty异步监听? Netty如何实现异步监听的? Future简介 我们知道Netty的I...

  • JAVA-每日一面 2022-01-24

    说说Netty 线程模型和 Netty 的零拷贝 Netty 线程模型首先,Netty 使用 EventLoop ...

  • Netty与Reactor 模式

    前言 Netty 的线程模型是基于NIO的Selector 构建的,使用了异步驱动的Reactor 模式来构建的线...

  • 四种i/o模型

    在netty权威指南一书中,开篇即为四种i/o模型的分析, 原因是netty是基于异步非阻塞i/o实现的,那么在n...

网友评论

      本文标题:Netty (三)异步模型

      本文链接:https://www.haomeiwen.com/subject/wanetktx.html