简介

  • Netty 是由JBOSS提供的一个 Java开源框架, 现在是 Github上的开源项目
  • Netty 是一个异步的、基于事件驱动的网络应用框架式, 用以快速开发高性能、高可靠性的网路IO程序
  • Netty主要针对在TCP协议下, 面向客户端的高并发应用, 或者 Peer to Peer(对等的) 场景下的大量数据持续传输的应用。
  • Netty的本质就是对NIO(None Blocked IO) 的一种封装。

应用场景

  • 互联网行业:

    • 在分布式系统中, 各个节点之间需要远程服务调用, 高性能的RPC框架必不可少, Netty作为异步高性能的通信框架, 往往作为基础通信组件被这些RPC框架使用。
  • 典型应用:

    • 阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信(默认使用Netty, 可改为mina, grizzy).
  • 大数据领域

    • Hadoop 的高性能通信和序列化组件(AVRO 实现数据文件共享) 的 RPC 框架, 默认采用Netty进行跨节点通信
    • 常用的 Netty Service 其实是 Netty 框架二次封装。
    • Spark1.6及其之后的版本, 之前使用的是akka, 1.6实验性的引入netty, akka在2.0版本移除, 只使用netty(其实akka底层还是用了netty...)。
    • Kafka 零拷贝技术(其实本质上是省去了操作系统由内核态且换到用户态的过程)

I/O 模型

  • 用什么样的channel(通道)进行数据的发送和接收, 很大程度上决定了通信的性能。

  • Java共支持3种网络编程模型/IO模式: BIO(Blocked IO)、NIO(None Blocked IO)、AIO(Asynchronized IO)

  • BIO: 同步且阻塞(传统阻塞型), 服务器实现模式为一个连接一个线程, 即客户端有连接请求时服务器就需要启动一个线程进行处理, 如果该连接不做任何事情就会造成不必要的线程开销

  • NIO: 同步非阻塞, 服务器实现模式为一个线程处理多个请求(连接), 即客户端发送的连接请求都会注册到多路复用器上, 多路复用轮询到连接有I/O请求就进行处理

  • AIO: 异步非阻塞, AIO 引入异步channel(通道)的概念, 采用了Proactor模式, 简化了程序编写, 有效的请求才启动线程, 它的特点是先由操作系统完成后才通知服务端程序启动线程去处理, 一般适用于连接数较多且连接时间较长的应用。

    • 但是Linux系统并没有提供对AIO的优化, 导致其在Linux上的运行性能不高, 目前用的不多。
  • 适用场景分析

    • BIO方式适用于连接数目比较小且固定的架构, 这种方式对服务器资源要求比较高, 并发局限于应用中, jdk1.4以前的唯一选择, 但程序简单易理解。
    • NIO方式适用于连接数目多且连接比较端的(轻操作) 的架构, 如聊天服务器, 弹幕系统, 服务器间通讯等。编程比较复杂, JDK1.4开始支持
    • AIO方式适用于连接数组多且连接比较长(重操作)的架构, 比如相册服务器, 充分调用OS参与并发操作, 编程比较复杂, JDK7开始支持

Netty简单认识的更多相关文章

  1. Netty——简单创建服务器、客户端通讯

    Netty 是一个基于NIO的客户.服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用.Netty相当简化和流线化了网络应用的编程开发过程 ...

  2. Netty简单的HTTP服务器

    本文转载自:https://www.cnblogs.com/luangeng/p/7875710.html HTTP协议:略 基于Netty的HTTP协议栈可以方便的进行异步非阻塞的HTTP服务器的开 ...

  3. Netty简单使用

    目录 丢弃服务器 DiscardServerHandler DiscardServer 测试 应答服务器 时间服务器 TimeServerHandler TimeClient TimeClientHa ...

  4. Netty简单的重连机制

    其实重连机制并不是多么多高深的技术,其实就是一个在客户端做一个简单的判断,如果连接断了,那么就重新调用连接服务端的代码 当然,我们重连的动作肯定是发生在断连之后发生的,我们可以在上篇的心跳机制的基础上 ...

  5. Netty简单介绍(非原创)

    文章大纲 一.Netty基础介绍二.Netty代码实战三.项目源码下载四.参考文章   一.Netty基础介绍 1. 简介 官方定义为:”Netty 是一款异步的事件驱动的网络应用程序框架,支持快速地 ...

  6. 【Netty整理01-快速入门】Netty简单使用Demo(已验证)

    多处摘抄或手打,为了十积分厚着脸皮标为原创,惭愧惭愧~本篇文章用于快速入门搭建一个简单的netty 应用,如想稍微深入系统的了解,请参照本人下一篇博客,链接: 参考地址: 官方文档:http://ne ...

  7. JAVA netty 简单使用

    实现一个功能,客户端和服务器 轮流对一个数加+1 服务器 public class Server { public static void main(String[] args) { NioEvent ...

  8. netty简单样例

    package com.example.demohystrix.process; import io.netty.bootstrap.ServerBootstrap; import io.netty. ...

  9. Netty简单聊天室

    1.创建maven项目,在pom.xml中引入netty的jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xm ...

随机推荐

  1. eclipse 快速隐藏所有方法的代码块

    java开发中往往一个class文件中会有很多方法,一个方法的实现代码有时候特别长 我个人就喜欢把无关的方法代码全部隐藏起来,只打开当前需要编辑的代码就行了(不喜欢看导航视图,容易头晕) Ctrl+s ...

  2. DuiLib中FlashDemo的例子经验杂粹1

    转载:https://www.jianshu.com/p/3e958ae9e5ab 最近用duilib做个东西,经常卡壳 ,而且以前学的现在又忘.现在觉得应该好好做笔记,以前老是觉得博客是很郑重的东西 ...

  3. redis 高性能的原因

    1. redis 数据存储在内存中: 2. redis 是单线程: 3. redis 多路复用: 指令先放到队列里 4.redis 使用resp 协议

  4. Rcnn/Faster Rcnn/Faster Rcnn的理解

    基于候选区域的目标检测器 1.  滑动窗口检测器 根据滑动窗口从图像中剪切图像块-->将剪切的图像块warp成固定大小-->cnn网络提取特征-->SVM和regressor进行分类 ...

  5. windows下pycharm连接vagrant的python环境

  6. .Net后台实现微信小程序支付

    最近一直再研究微信支付和支付宝支付,官方支付文档中一直在讲与第三方支付打交道的原理,却没有介绍我们自己项目中的APP与后台该怎么交互(哈哈,人家也没必要介绍这一块).拜读了官方文档和前辈们的佳作,自己 ...

  7. PHP pclzip.php 解压中文乱码

    修改 pclzip中方法privExtractFile 代码 if ($p_path != '') { $p_entry['filename'] = $p_path."/".$p_ ...

  8. Pytorch 初次使用nn包

    计算图和autograd是十分强大的工具,可以定义复杂的操作并自动求导:然而对于大规模的网络,autograd太过于底层. 在构建神经网络时,我们经常考虑将计算安排成层,其中一些具有可学习的参数,它们 ...

  9. 【剑指Offer面试编程题】题目1523:从上往下打印二叉树--九度OJ

    题目描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行一个整数n(1<=n<=1000, ...

  10. java并发AtomicIntegerFieldUpdater

    java并发AtomicIntegerFieldUpdater 支持对象的成员变量原子操作类由AtomicIntegerFieldUpdater,AtomicLongFieldUpdater, Ato ...