zoukankan      html  css  js  c++  java
  • netty初识

    Netty是提供一种异步的事件驱动的网络应用框架,它是一个NIO的C/S的框架,可以开发出高性能,高拓展性的网络服务端和客户端。

    EventLoopGroup bossGroup = new NioEventLoopGroup(1);
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    try {
        ServerBootstrap b = new ServerBootstrap();
        b.group(bossGroup, workerGroup)
            .channel(NioServerSocketChannel.class)
            .handler(new LoggingHandler(LogLevel.INFO))
            .childHandler(new ChannelInitializer<SocketChannel>() {
                @Override
                     public void initChannel(SocketChannel ch) {
                         ChannelPipeline p = ch.pipeline();
                         p.addLast(new DiscardServerHandler());
                     }
                 });
    
                // Bind and start to accept incoming connections.
                ChannelFuture f = b.bind(PORT).sync();
    
                // Wait until the server socket is closed.
                // In this example, this does not happen, but you can do that to gracefully
                // shut down your server.
                f.channel().closeFuture().sync();
        } finally {
                workerGroup.shutdownGracefully();
                bossGroup.shutdownGracefully();
        }
    

    以上是最简单的一个netty服务端代码,此处定义了两个event loop。一个称为boss,用来接收连接,另一个称为worker,用来处理boss接收到的连接流量并注册给worker。设置通道类型为NioServerSocketChannel。

    这里的核心模块是childHandler,即NIO中的回调部分,它指定了连接后调用的ChannelHandler。参数是ChannelInitializer类型,它是个抽象类,需要实现initChannel方法,在这个方法中设置ChannelHandler。最后指定监听的端口,进行绑定操作,调用sync会阻塞直到服务器完成绑定。

    下面是ServerHandler部分,用来处理各种回调的模块。

    public class DiscardServerHandler extends ChannelInboundHandlerAdapter {
    
        //对该方法进行重写,实现自己的逻辑,因为DISCARD,所以这里将收到的字节数组release
        //任何增加引用计数的数据都需要release
        @Override
        public void channelRead(ChannelHandlerContext ctx, Object msg) {
            // discard
            ((ByteBuf) msg).release();
        }
    
        @Override
        public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
            // Close the connection when an exception is raised.
            cause.printStackTrace();
            ctx.close();
        }
    }
    
  • 相关阅读:
    [Robot Framework] Robot Framework用Execute Javascript对XPath表示的元素执行scrollIntoView操作
    一台机器管理其他都装有kvm的实体机的虚拟机
    阿里云服务器问题
    开发族的跨域问题
    mysql不能连接的原因
    网络命令
    mysql5.7报错端口占用,服务起不来
    nagios的原理及server端跟client端安装配置全部过程
    查看CPU数量和核心数
    iptables的生产场景w
  • 原文地址:https://www.cnblogs.com/horo/p/6922480.html
Copyright © 2011-2022 走看看