Netty概念

Netty 是什么
  • netty 是一个基于nio的客户、服务器端编程框架,

  • netty提供异步的,事件驱动的网络应用程序框架和工具,可以快速开发高可用的客户端和服务器。

  • netty是基于nio的,它封装了jdk的nio,让我们使用起来更加方法灵活

为什么要用 Netty?
  • 跨平台与兼容性

  • Netty提供了自己的ByteBuffer实现

  • 压碎著名的Epoll缺陷

Netty 应用场景
  • 高性能的 RPC 框架(Hadoop,Dubbo)

  • 网络游戏

Netty 核心组件有哪些?分别有什么作用?
  • EventLoop:每个客户端的socket都会注册到一个EventLoop上,由这个EventLoop负责处理该channel的所有IO事件和IO操作。

  • Event:
    ChannnelActive事件(建立连接),
    ChannelInActive事件(连接关闭),
    ChannelRead事件(收到消息),
    ChannelReadComplete事件(读完成),
    ChannelRegistered事件(channel被注册到EventLoop)
    ChannelUnregistered事件(channel从EventLoop注销),
    ChannelWritabilityChanged 事件(可写状态改变),
    ExceptionCaught事件(出现异常),
    UserEventTriggerd事件(收到一个用户自定义事件)

  • Channel:netty在socket上的一种封装和抽象。

  • ChannelPipeline:拦截器链模式,负责处理该channel的所有入站事件和出站操作

  • ChannelHandler:处理IO事件,拦截IO事件,把IO事件、IO操作传递给当前ChannelPipeline中的下一个Handler.

  • ChannelContextHandler:和ChannelPipe以及其他ChannelHandler交互。向上或向下传递事件

EventloopGroup 和 EventLoop
  • EventloopGroup:
    一般创建两个,一个用于处理客户端连接,一个用于处理I/O流操作

  • EventLoop
    处理I/O读写
    防止并发操作导致的锁竞争(系统Task)
    处理定时任务

Bootstrap 和 ServerBootstrap
  • Bootstrap:
    客户端入口,
    指定Channel,
    设置SocketChannel选项,
    设置处理器,
    连接指定地址

  • ServerBootstrap:
    服务端入口,
    指定channel,
    设置处理器,
    配置ServerSocketChannle,
    配置子通道SocketChannel,
    绑定并监听某端口

NioEventLoopGroup 默认的构造函数会起多少线程?

DEFAULT_EVENT_LOOP_THREADS = Math.max(1, SystemPropertyUtil.getInt(“io.netty.eventLoopThreads”, NettyRuntime.availableProcessors() * 2));

  • bossGroup 中只有一个线程

  • workerGroup中默认是 CPU 核心数乘以2

Netty 线程模型
  • Netty通过Reactor模型基于多路复用器接收并处理用户请求

  • boss线程池的线程负责处理请求的accept事件,封装后交给work线程池

  • work线程池负责请求的read和write事件,由对应的Handler处理

Netty 服务端和客户端的启动过程
  • 启动ServerBootstrap/Bootstrap

  • 指定监听组(boosGroup服务端)和工作组workGroup

  • 指定NIO模式

  • 初始化Channel

  • 连接后的读写逻辑

  • 监听/连接 ip端口

Netty 长连接、心跳机制
  • 使用IdleStateHandler 超时机制来实现心跳和重连

  • 通过三个参数(段时间内未接受和发送数据,段时间内未接收数据,段时间内未发送数据)来执行指定方法

Netty 零拷贝
  • 零拷贝的应用程序要求内核直接将数据从磁盘文件拷贝到套接字(Socket),而无须通过应用程序。

  • 零拷贝不仅提高了应用程序的性能,而且减少了内核和用户模式见上下文切换

Netty的特点?
  • 高并发(NIO)

  • 传输快(零拷贝)

  • 封装好(封装NIO细节,提供易用API)

  • 解决了Epoll Bug(Selector 空轮询,最终导致 CPU 100%)

(巨坑)

在windows10环境下使用NIO/Netty等各种socket连接时,设置端口复用貌似没什么用,断开的端口还是会处于timeout状态(待解决)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值