简介

  • 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. Java基础 -4.2

    Switch分支语句 switch是一个开关语句,它主要是根据内容来进行判断的,需要注意的是switch中可以判断的只能够是数据(int.char.枚举.String)而不能够使用逻辑判断 publi ...

  2. MIT宣布人工智能独立设系!

    导读 MIT宣布人工智能独立设系!AI与电子工程.计算机科学系将三分天下? MIT 电子工程和计算机科学系(EECS)拆分啦.拆分后分为 3 个学科群(faculty),或者说 3 个系:电子工程(E ...

  3. go笔记(go中的方法调用)

    最近接触go语言  发现和java的方法调用有些类似但又有自己的注意点 go的包我理解为则是隔离的最小模块 先在src目录下创建main.go文件  package为main,然后在src下创建mod ...

  4. notepad++一次去掉所有空行,然后加上2个空行

    打开替换窗口,查找我的目标中填写: ^\r\n 替换为中不填,空着, 点击全部替换按钮. 如何给所有行添加2行空行: 打开替换窗口,查找目标中填写: \r\n 替换为中填写: \r\n\r\n\r\n ...

  5. git rebase 与git merge 小结

    git merge是用来合并两个分支的. $ git merge b   将b分支合并到当前分支 同样  $ git rebase b ,也是把 b分支合并到当前分支 ---------------- ...

  6. 2020牛客寒假算法基础集训营4 J 二维跑步

    https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43035417 假设有i步选择不动,就有n-i步移动 假设其中又有a ...

  7. C/C++ - 多线程

    前几天简单对C和C++中的创建多线程的函数进行了测试,这篇随笔就简单介绍一下创建线程的相关函数. C中三个创建线程函数:pthread_create()._beginthread().CreateTh ...

  8. [GWCTF 2019]mypassword

    这道题(不只这道题以后也一定)要注意控制台中的信息,给出了login.js代码,会把当前用户的用户名和密码填入表单 注册个账号,登录之后给提示不是注入题 浏览一下网站功能,feedback页面可以提交 ...

  9. Python简单程序爬取天气信息,定时发邮件给朋友【高薪必学】

    前段时间看到了这个博客.https://blog.csdn.net/weixin_45081575/article/details/102886718.他用了request模块,这不巧了么,正好我刚用 ...

  10. 设计模式课程 设计模式精讲 18-2 迭代器模式coding

    1 代码演练 1.1 代码演练1(迭代器模式演练) 1.2 代码使用场景 1 代码演练 1.1 代码演练1(迭代器模式演练) 需求: 课程管理:需要实现课程可进行增添,删除,并能够打印出课程列表. u ...