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

  • 相关阅读:
    Server08 R2 Live Migration 测试 Part 6:使用SCVMM 2008 R2进行Live Migration
    Workstation 可成功安装ESX但发现不到本地存储的解决方法
    代码生成器ltscode2.1
    2010面试攻略
    我看代码生成
    程序员如何提高工作效率
    PE格式全分析
    Quartz.NET 2.0 学习笔记(4) :cron表达式
    asp.net 2.0 访问 MySQL 数据库
    My blog.
  • 原文地址:https://www.cnblogs.com/Unlimited-Blade-Works/p/12653405.html
Copyright © 2011-2022 走看看