zoukankan      html  css  js  c++  java
  • Netty(一、初步了解)

    NIO/OIO

    Netty是流行的NIO框架,我们在学习Netty之前需要先了解什么是NIO和BIO。

    OIO:阻塞IO,传统的socket就是阻塞IO,例如服务端accept是阻塞的,只有当新连接来了,accept才会返回,主线程才能继续。这种IO占用了系统的调度资源,造成了浪费。

    NIO(Nonblocking I/O): 非阻塞IO,用的是事件机制,它会获取事件并交给Selector处理,Selector去遍历所有的socket,一旦有一个socket建立了连接,则通知Thread,Thread处理完成后再返回给客户端。若没有事件则将线程休眠起来,直到下个事件发生在继续。

    Netty

    Netty是基于NIO开发的网络通信框架,所以整个Netty都是异步的,原生的java nio使用起来不是很方便,而Netty将其封装后,提供了易于操作的使用模式和接口。其中在rocketmq和dubbo中均有使用到。

    核心组件

    • Bootstrap和ServerBootstrap:Netty应用程序通过设置bootstrap引导类来完成,该类提供了一个用于应用程序网络层配置的容器。Bootstrap服务端的是ServerBootstrap,客户端的是Bootstrap。
    • Channel:Netty 中的接口 Channel 定义了与 socket 丰富交互的操作集:bind, close, config, connect, isActive, isOpen, isWritable, read, write 等等。
    • ChannelHandler:ChannelHandler 支持很多协议,并且提供用于数据处理的容器,ChannelHandler由特定事件触发, 常用的一个接口是ChannelInboundHandler,该类型处理入站读数据(socket读事件)。
    • ChannelPipeline:ChannelPipeline 提供了一个容器给 ChannelHandler 链并提供了一个API 用于管理沿着链入站和出站事件的流动。每个 Channel 都有自己的ChannelPipeline,当 Channel 创建时自动创建的。
    • EventLoop:EventLoop 用于处理 Channel 的 I/O 操作。一个单一的 EventLoop通常会处理多个 Channel 事件。一个 EventLoopGroup 可以含有多于一个的 EventLoop 和 提供了一种迭代用于检索清单中的下一个。
    • ChannelFuture:Netty 所有的 I/O 操作都是异步。因为一个操作可能无法立即返回,我们需要有一种方法在以后获取它的结果。出于这个目的,Netty 提供了接口 ChannelFuture,它的 addListener 方法

    ByteBuf

    Netty需要接收数据的时候,会在堆内存之外开辟一块内存,数据可以直接从IO到这块内存中去,通过ByteBuf就可对数据进行操作。ByteBuf是个字节数据的容器,提供了两个索引,一个用于读,一个用于写。

  • 相关阅读:
    Eclipse安装Hadoop插件
    (转)Ubuntu14.0.4中hadoop2.4.0伪分布模式配置
    Hadoop--DataNode无法启动
    启动与关闭hadoop
    hadoop中执行命令时发生错误
    strings命令
    Deriving data from ElasticSearch Engine
    elasticsearch data importing
    reading words in your computer and changing to female voice, linux festival text2wave saving wav files
    DDNS client on a Linux machine
  • 原文地址:https://www.cnblogs.com/Unlimited-Blade-Works/p/12653405.html
Copyright © 2011-2022 走看看