zoukankan      html  css  js  c++  java
  • Netty是什么?它能干什么?

    Netty

    异步事件驱动的网络应用程序框架。

    特点

    • 高并发
      • 通过Reactor模型基于NIO开发的网络通信框架 
    • 传输快
      • 零拷贝
        • Netty的接受和发送bytebuffer使用堆外直接内存进行socket读写,传统堆内存进行socket读写,JVM将堆内存buffer拷贝到内存,然后写入socket。相比之下,消息在发送多了一次缓冲区的内存拷贝。 
        • Netty提供buffer,聚合多个bytebuffer。传统通过内存拷贝将多个小buffer合并大的buffer。
        • Netty文件传输使用transferto,直接将文件缓冲区的数据发送到目标channel。传统通过循环write导致内存拷贝。  
    • 使用简单
      • 封装NIO,提供调用接口
    • 功能强大
      • 预置多种编解码功能
      • 支持多种主流协议
      • 通过channelhandler对通信框架扩展
    • 性能高
      • IO线程模型
      • 内存零拷贝
      • 内存池设计
      • 串行化处理读写
      • 高性能序列化协议 
    • 稳定
      • 修复所有NIO bug
        • epoll bug,导致selector空轮询,最终导致CPU100% 

    应用场景

    • RPC框架实现的基础通信组件,用于各进程节点间的内部通信
    • 定制私有协议栈,Netty提供TCP/UDP和HTTP协议栈
    • 跨界点通信

    发送消息方式

    • 直接写入channel,消息从channelpipeline的尾部移动
    • 写入channelhandler绑定的channelhandlercontext,消息从channelpipeline的下一个channelhandler移动

     事件驱动模型

    • 轮询
    • 事件驱动方式。boss线程和work线程,boss线程把事件放入事件队列,work线程消费事件队列中的事件,调用对应的handler处理事件。

    Reactor线程模型

    单Reactor单线程

    单Reactor多线程

    一个线程负责监听服务端,接受客户端TCP连接请求;一个线程同时处理多条链路,一个链路只对应一个线程

    主从Reactor多线程

    服务器Netty工作架构

    每个端口对应一个boss线程

  • 相关阅读:
    学渣逆袭回忆录:0序
    selenium和Firefox版本不兼容
    学习Python的第一课(简单的单元测试)
    C# 实现模拟登录功能,实现公共类分享。
    MVC之权限管理-网站开发之路
    程序员学习之路
    【数据结构】浅谈线性数据结构
    【数据结构】二叉堆
    tire 学习心得
    洛谷P1801 黑匣子
  • 原文地址:https://www.cnblogs.com/ivy-xu/p/12656290.html
Copyright © 2011-2022 走看看