zoukankan      html  css  js  c++  java
  • netty编程一:快速入门

    服务器端编程

    第一步:maven 依赖 netty-all.jar,详情参考文章最后的maven依赖

    第二步:创建服务端的NIO线程组EventLoopGroup;

    EventLoopGroup bossGroup = new NioEventLoopGroup();
    EventLoopGroup workerGroup = new NioEventLoopGroup();

    第三步:创建并配置服务端启动辅助类ServerBootstrap;

    1、创建ServerBootstrap

    ServerBootstrap b = new  ServerBootstrap();

    2、配置ServerBootstrap实例的线程组(group):绑定线程组

    b.group(bossGroup, WorkerGroup);

    3、配置ServerBootstrap实例的channel:将创建的channel为NioServerSocketChannel

    b.channel(NioServerSocketChannel.class);

    4、配置ServerBootstrap实例的option:配置NioServerSocketChannel的tcp参数,eg:将他的backlog设置为1024;

    b.option(ChannelOption.SO_BACKLOG, 1024);

    5、配置ServerBootstrap实例的childHandler:绑定I/O事件的处理类;eg 半包问题处理,记录日志,数据编码解码,用户自定义的处理等等

    // 此处注意:ChildChannelHandler是自定义的,继承了ChannelHandlerAdapter类,netty框架让我们可以集中精力用于实际业务上的数据处理,此处的内容后续文章在做重点分析
    b.childHandler(new ChildChannelHandler());

    6、配置ServerBootstrap实例的绑定并监听port与等待链路的关闭:绑定port,并调用同步阻塞方法sync来等待绑定操作完成,完成后会返回channelFuture实例(异步操作的通知回调)

    // 绑定端口,同步等待绑定成功
    ChannelFuture  f = b.bind(8888).sync();
    // 阻塞等待服务端监听端口关闭,目的:等待服务端链路关闭后main函数才退出
    f.channel().closeFuture().sync();

    7、注意:退出时,记得释放线程池资源

    try{
        // 服务器启动辅助类的创建与配置内容
        // ...  
    }finally{
        // 优雅退出,通过调用线程组的shutdownGracefully方法释放相关资源
        bossGroup.shutdownGracefully();  
        workerGroup.shutdownGracefully();  
    }

    客户端编程

    第一步:maven 依赖 netty-all.jar

    第二步:创建客户端的NIO线程组EventLoopGroup;

    EventLoopGroup group = new NioEventLoopGroup();

    第三步:创建并配置客户端启动辅助类Bootstrap;

    1、创建Bootstrap

    Bootstrap b = new  Bootstrap();

    2、配置Bootstrap实例的线程组(group):绑定线程组

    b.group(group);

    3、配置Bootstrap实例的channel:将创建的channel为NioSocketChannel

    b.channel(NioSocketChannel.class);

    4、配置Bootstrap实例的option:配置NioSocketChannel的tcp参数,eg:将他的nodelay设置为true;

    b.option(ChannelOption.TCP_NODELAY, true);

    5、配置Bootstrap实例的handler:绑定I/O事件的处理类;eg 半包问题处理,记录日志,数据编码解码,用户自定义的处理等等

    // 此处注意:TimeClientHandler是自定义的,继承了ChannelHandlerAdapter类,netty框架让我们可以集中精力用于实际业务上的数据处理,此处的内容后续文章在做重点分析
    b.handler(new ChannelInitializer<SocketChannel>(){
        @Override
        public  void initChannel(SocketChannel ch) throws Exception{
            ch.pipeline().addLast(new TimeClientHandler())
        }
    });   

    6、配置Bootstrap实例的绑定并监听port与等待链路的关闭:绑定port,并调用同步阻塞方法sync来等待绑定操作完成,完成后会返回channelFuture实例(异步操作的通知回调)

    // 绑定服务器的IP和端口,同步等待连接指定服务器成功
    ChannelFuture  f = b.connect(127.0.0.1,8888).sync();
    // 阻塞等待服务端监听端口关闭,目的:等待服务端链路关闭后main函数才退出
    f.channel().closeFuture().sync();

    7、注意:退出时,记得释放线程池资源

    try{
        // 服务器启动辅助类的创建与配置内容
        // ...  
    }finally{
        // 优雅退出,通过调用线程组的shutdownGracefully方法释放相关资源
        group.shutdownGracefully();  
    }

    关于netty的maven依赖

    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
        <version>4.1.33.Final</version>
    </dependency>
  • 相关阅读:
    图片上下左右居中
    点击滚动指定高度 屏幕滚动事件
    实例16 验证登录信息的合法性
    实例15 判断某一年是否为闰年
    实例14 实现两个变量的互换(不借助第3个变量)
    实例13 不用乘法运算符实现2*16
    实例12 用三元运算符判断奇数和偶数
    实例11 加密可以这样简单(位运算)
    实例10 自动类型转换与强制类型转换
    实例9 重定向输入流实现程序日志
  • 原文地址:https://www.cnblogs.com/outpointexception/p/10428985.html
Copyright © 2011-2022 走看看