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线程

  • 相关阅读:
    关于嵌套循环的循环初始化语句问题:
    自己写的小程序
    计算1-1/3+1/5-1/7+···的前n项和
    终于弄好了 homework-09
    现代C++作业2 与 围棋homework-06
    C++11 能好怎?
    黄金点游戏之客户端(homework-05)
    惊艳的随机化方法 -World Search (homework-04)
    GUI、模块化与结对编程(homework-03)
    最大二位子数组和问题(homework-02)
  • 原文地址:https://www.cnblogs.com/ivy-xu/p/12656290.html
Copyright © 2011-2022 走看看