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是个字节数据的容器,提供了两个索引,一个用于读,一个用于写。

  • 相关阅读:
    Lightoj---1030
    hdu---2091---空心三角形
    hdu---2037---今年暑假不AC
    将ant Design本地化,可通过link以及script直接引入html中使用
    js 解析json
    解决ant Design dva ajax跨越请求 (status=0)
    ubantu 14.04中安装npm+node.js+react antd
    ubantu中搭建virtualenv+python3.4+flask
    Linux ubantu中安装虚拟/使用环境virtualenv以及python flask框架
    页面中去除浮动 clear:both
  • 原文地址:https://www.cnblogs.com/Unlimited-Blade-Works/p/12653405.html
Copyright © 2011-2022 走看看