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>
  • 相关阅读:
    fedora上部署ASP.NET——(卡带式电脑跑.NET WEB服务器)
    SQL Server 请求失败或服务未及时响应。有关详细信息,请参见事件日志或其它适合的错误日志
    8086CPU的出栈(pop)和入栈(push) 都是以字为单位进行的
    FTP 服务搭建后不能访问问题解决
    指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
    Linux 安装MongoDB 并设置防火墙,使用远程客户端访问
    svn Please execute the 'Cleanup' command. 问题解决
    .net 操作MongoDB 基础
    oracle 使用绑定变量极大的提升性能
    尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
  • 原文地址:https://www.cnblogs.com/outpointexception/p/10428985.html
Copyright © 2011-2022 走看看