资讯专栏INFORMATION COLUMN

Netty简明教学文档

raise_yang / 704人阅读

摘要:写个简单点,比较小白的文档,言语比较接地气是什么的高层封装,很难写,所以有了,方便异步的操作的主要代码片段按照代码顺序解释如下事件循环队列,用来接受或发送事件。

写个简单点,比较小白的文档,言语比较接地气

Netty是什么?
NIO的高层封装,NIO很难写,所以有了Netty,方便异步的操作

service的主要代码片段

public void run() throws Exception {
        EventLoopGroup bossGroup = new NioEventLoopGroup(); // (1)
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        try {
            ServerBootstrap b = new ServerBootstrap(); // (2)
            b.group(bossGroup, workerGroup)
             .channel(NioServerSocketChannel.class) // (3)
             .childHandler(new ChannelInitializer() { // (4)
                 @Override
                 public void initChannel(SocketChannel ch) throws Exception {
                     ch.pipeline().addLast(new DiscardServerHandler());
                 }
             })
             .option(ChannelOption.SO_BACKLOG, 128)          // (5)
             .childOption(ChannelOption.SO_KEEPALIVE, true); // (6)
    
            // Bind and start to accept incoming connections.
            ChannelFuture f = b.bind(port).sync(); // (7)
    
            // 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();
        }
    }

按照代码顺序解释如下

(1) EventLoopGroup bossGroup = new NioEventLoopGroup();
事件循环队列,用来接受或发送事件。大家可以把他想象成邮局,消息都要先到邮局,然后再分发出去,邮局维护了一个循环队列,用来不断的收信和发信。

(2)ServerBootstrap b = new ServerBootstrap();
启动服务

(3) b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class)
开启了一个通道,这个通道是用来接受连接请求的,管道大家都知道吧,IO里也有,NIO中也有,一切Java中到处都是管道

(4).childHandler(new ChannelInitializer()
这个handler是用来表示响应什么样的事件的,比如我们这里DiscardServerHandler,随着程序的复杂,你会加上更多的handle,handler是具体干事的人

(5).option(ChannelOption.SO_BACKLOG, 128)
channel的配置参数,具体可以查手册

(6).childOption(ChannelOption.SO_KEEPALIVE, true);
option()是 NioServerSocketChannel的配置,childOption()是被parent ServerChannel接受的channel,这里就指的是NioServerSocketChannel

(7)ChannelFuture f = b.bind(port).sync();
绑定端口并开始

再看看我们主要进行事件处理的handle

public class DiscardServerHandler extends ChannelHandlerAdapter { // (1)

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) { // (2)
        // Discard the received data silently.
        ((ByteBuf) msg).release(); // (3)
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { // (4)
        // Close the connection when an exception is raised.
        cause.printStackTrace();
        ctx.close();
    }
}

(1)DiscardServerHandler extends ChannelHandlerAdapter
表示:俺是具体干事的人

(2)我们overrider了 channelRead(),用来读取接受到的信息

(3)异常处理,懂的...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69978.html

相关文章

  • ApacheCN 编程/大数据/数据科学/人工智能学习资源 2019.6

    摘要:请回复这个帖子并注明组织个人信息来申请加入。权限分配灵活,能者居之。数量超过个,在所有组织中排名前。网站日超过,排名的峰值为。导航归档社区自媒体平台微博知乎专栏公众号博客园简书合作侵权,请联系请抄送一份到赞助我们 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=...

    Bmob 评论0 收藏0
  • 少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别

    摘要:的选择器允许单个线程监视多个输入通道。一旦执行的线程已经超过读取代码中的某个数据片段,该线程就不会在数据中向后移动通常不会。 1、引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典IO(也就是常说的阻塞式IO)的API时,很快就会发现一个问题:我什么时候应该使用经典IO,什么时候应该使用NIO? 在本文中,将尝试用简明扼要的文字,阐明Java NIO和经典IO之...

    Meils 评论0 收藏0
  • 慕课网_《Netty入门之WebSocket初体验》学习总结

    时间:2018年04月11日星期三 说明:本文部分内容均来自慕课网。@慕课网:https://www.imooc.com 教学源码:https://github.com/zccodere/s... 学习源码:https://github.com/zccodere/s... 第一章:课程介绍 1-1 课程介绍 什么是Netty 高性能、事件驱动、异步非阻塞的IO Java开源框架 基于NIO的客户...

    Noodles 评论0 收藏0

发表评论

0条评论

raise_yang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<