netty系列(0)----非常浅薄的初探或者叫读书笔记 - - ITeye博客

伍仔 关注

收藏于 : 2019-01-20 08:14   被转藏 : 1   

本文没有参考意义,仅作为我的读书笔记吧,所有功劳归功于下面链接的原作者
https://segmentfault.com/a/1190000014969780
下面这个链接也给我很大帮助
[urlhttps://www.iteye.com/magazines/132-Java-NIO#579][/url]

netty学习笔记
不像之前的的阻塞性IO,必须为每个任务都分配一个Thread,大量的Thread会造成上下文的大量切换,耗费时间
NIO提供了一种非阻塞性IO,用一个selector来为IO操作选择空闲的Thread

Netty的几个关键知识点
1:channel 
因为IO操作的几个原语bind()、connect()、read()和write()属于底层的实现,之前用socket来作为实体操作。现在在netty中提供了channel的api大大简化了难度。
2:回调
很简单就是按我们所知的,预留的一个方法,当某个任务完成后,调用的方法
3:channelFuture
扩展了juc.Future的方法, 不用时刻去检查是否已完成, 而是提供开放注册一系列的channelFutureListener,当完成后会主动调用listener的operateCompelete方法。
Channel channel = ...;
// 连接远程节点
ChannelFuture future = channel.connect(
    new InetSocketAddress("192.168.0.1", 25));
//注册一个ChannelFutureListener,以便在操作完成时获得通知
future.addListener(new ChannelFutureListener() {
    @Override
        public void operationComplete(ChannelFuture future) {
        //状态判断
        if (future.isSuccess()){
            //如果操作是成功的,则创建一个ByteBuf 以持有数据
            ByteBuf buffer = Unpooled.copiedBuffer(
                "Hello",Charset.defaultCharset());
            //将数据异步地发送到远程节点。返回一个ChannelFuture
            ChannelFuture wf = future.channel()
                .writeAndFlush(buffer);
            ....
        } else {
            //如果发生错误,则访问描述原因的Throwable
            Throwable cause = future.cause();
            cause.printStackTrace();
        }
    }
});

提供了一个例子, 因为连接是异步,所以connect会立刻返回,通过向channelFuture注册listener的方式,在操作完成后回调方法。
4: ChannelHandler
作为处理事件的进入和出流的用户可自编辑的组件, 初步理解为一个处理逻辑的链
5: ChannelPipeline
初步理解为ChannelHandle的容器,通过api将Handler加入到Pipeline中
6:EventLoop
没看懂, 每个EventLoopGroup可能有多个EventLoop,用于处理连接的生命周期中所发生的事件
#TODO
7:Bootstrap和ServerBootstrap
Boot为客户端,Server为服务端
客户端有两个EventLoopGroup,服务端有两个,用于维持本身的连接和响应客户端的连接。




0
0
分享到:
评论
相关资源推荐
  • 读书笔记浅薄 - 互联网如何毒化了我们的大脑

  • 电子书 浅薄

  • 浅薄:互联网如何毒化了我们的大脑-尼古拉斯·卡尔.pdf

    浅薄:互联网如何毒化了我们的大脑》在我们跟计算机越来越密不可分的过程中,我们越来越多的人生体验通过电脑屏幕上闪烁摇曳、虚无缥缈的符号完成,最大的危险就是我们即将开始丧失我们的人性,牺牲人之所以区别于机器的本质属性。——尼古拉斯•卡尔“谷歌在把我们变傻吗?”当尼古拉斯•卡尔在发表于《大西洋月刊》上赫赫有名的那篇封面文章中提出这个问题的时候,他就开启了人们热切渴望的期盼源泉,让人急于弄清楚互联网是在如何改变我们的。卡尔同时也明确回答了我们这个时代面临的一个重要问题:在我们尽情享受互联网慷慨施舍的过程中,我们正在牺牲深度阅读和深度思考的能力吗? 现在,卡尔把他的论证扩展到最具说服力的探索研究上,针对互联网导致的智力后果和文化后果,他阐述了迄今未见公开发表的观点结论。娓娓道来,叙述得引人入胜。

  • 跟学识浅薄却固执己见的人聊天是种什么体验?

  • Kotlin初探

    示例源码传送门前言Kotlin是一种在 Java虚拟机上执行的静态型别编程语言,它主要是由俄罗斯圣彼得堡的JetBrains开发团队所发展出来的编程语言。该语言有几个优势 1. 简洁 它大大减少你需要写的样板代码的数量。 2. 安全 避免空指针异常等整个类的错误。 3. 通用 构建服务器端程序、Android 应用程序或者在浏览器中运行的前端程序。 4. 互操作性 通过 1

  • 浅薄——互联网如何毒害我们的大脑].[美].尼古拉斯·卡尔.扫描版.pdf

    浅薄——互联网如何毒害我们的大脑].[美].尼古拉斯·卡尔.扫描版.pdf

  • 浅薄:互联网如何毒害了我们的大脑.pdf

    浅薄:互联网如何毒害了我们的大脑 这本书是一本畅销书,带领我们进入对大脑的全新认识,亦会让我们静下心来思考些问题。 上传的问英文版

  • Netty权威指南读书笔记(☆☆☆)

    文章目录Netty权威指南读书笔记(☆☆☆)IO基础入门Linux的IO模型简介IO多路复用技术Java的IO演进NIO入门传统的BIO编程伪异步IOAIO编程选择Netty的理由原生NIO的缺点Netty 入门应用TCP粘包/拆包问题的解决之道解决粘包问题代码实现分隔符和定长解码器的应用DelimiterBasedFrameDecoder应用开发FixedLengthFrameDecoder固定...

  • Netty实战读书笔记(第五章(一))

    Netty实战第五章主要讲Netty封装的数据容器:ByteBuf(java中ByteBuffer的替代品,在网络中传输主要通过字节进行传输)。 Netty中主要通过abstract class ByteBuf、interface ByteBufHolder进行操作。 Netty中ByteBuf的主要优点:读写使用不同的索引(readIndex、writeIndex)、容量支持

  • Netty实战读书笔记(第一章概念梳理)

    Netty是一个由事件驱动的java异步I/O高性能网络通信框架,在java中,提供网络通信的JDK主要有I/O、NIO、AIO。I/O主要是同步阻塞的网络通信协议,NIO(No-blocking I/O)提供非阻塞的读写操作,又因为非阻塞,所以可提供异步操作,NIO一般可当做异步I/O。AIO是jdk1.7中引入的异步I/O操作,客户端的请求都是通过OS完成了I/O操作之后,再交由服务器处理启动

  • Netty4.x 源码实战系列(一):ServerBootstrap 与 Bootstrap 初探

    Netty4.x分析实战,引导类ServerBootstrap与Bootstrap初探

  • Netty系列Netty线程模型【转】

    本文系转载,原文地址: http://www.infoq.com/cn/articles/netty-threading-model/ 1. 背景 1.1. Java线程模型的演进 1.1.1. 单线程 时间回到十几年前,那时主流的CPU都还是单核(除了商用高性能的小机),CPU的核心频率是机器最重要的指标之一。 在Java领域当时比较流行的是单线程

  • Netty4.x 源码实战系列(二):服务端bind流程详解

    在上一篇《ServerBootstrap 与 Bootstrap 初探》中,我们已经初步的了解了ServerBootstrap是netty进行服务端开发的引导类。 且在上一篇的服务端示例中,我们也看到了,在使用netty进行网络编程时,我们是通过bind方法的调用来完成服务器端口的侦听:EventLoopGroup bossGroup = new NioEventLoopGroup(); Event

  • netty系列(一)—netty详解

    netty 架构 高性能,事件驱动的NIO框架 netty 架构图 结构说明 event model:可扩展的事件模型 Universal Communication API:统一的通讯API zero-copy-capable byte buffer:零拷贝buffer,支持动态扩容 channel:socket支持http,nio,oio (AIO基于操作系统实现 ) ...

  • Netty 从零到一学习系列之入门篇

     Netty开发使用相当的简单,且相当的灵活,开发者不用关心NIO底层的知识,只需要关心业务内容即可。Netty是通过ChannelHandler 进行扩展,开发者只需要实现 ChannelHandler,并把实现类注册到 ChannelPipline中即可。     ChannelHandler是一个接口,Netty实现了ChanneHandlerAdapter适配器,开发者可以直接继承Cha...

  • Netty技术系列文章_Netty入门

    Netty 是一个成熟的JAVA NIO框架,使用Netty可以非常简单的去解决NIO的种种问题,例如粘包和分包问题、编码和解码等问题。本文延续Netty技术系列文章_Netty的铺垫NIO入门,如果想先对NIO进行了解可以先看上述的文章。   本文参考了《Netty in action》 和 《Netty权威指南》,有兴趣的读者可以对这两本书进行详细阅读。本文主要描述Netty的基础使用方式

  • MongoDB初探系列之一:MongoDB安装及建议配置

  • Netty4.x 源码实战系列(四):深入浅出学Pipeline

    在上一篇《Netty4.x 源码实战系列(三):NioServerSocketChannel全剖析》中,我们详细分析了NioServerSocketChannel的初始化过程,并得出了如下结论: 在netty中,每一个channel都有一个pipeline对象,并且其内部本质上就是一个双向链表 本篇我们将深入Pipeline源码内部,对其一探究竟,给大家一个全方位解析。Pipeline初始化过程

  • https://blog.csdn.net/luxialan/article/details/42882585

    由生物学基础我们知道,神经网络是有无数个神经元和连接这些神经元的突触构成的,某个神经元接受一系列的电信号刺激,当这个刺激达到一定的阀值后,这个神经元就被激活,通过突触将某些信息传递给下一个神经元。每个神经元可以看成是一个激活函数(activation function),输入值为强度大小不同的电刺激,输出值为传递给下一个神经元的刺激。 我们先来看神经网络最简单的形式,神经元。 输入:

  • Netty实战读书笔记(第四章)

    Netty实战第四章:传输 比较java自带的OIO、NIO、Netty提供的OIO、Netty提供的NIO。 OIO: import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.S

 阅读文章全部内容  
点击查看
文章点评
相关文章
伍仔 关注

文章收藏:1380

TA的最新收藏