首页 > 编程语言 >Java Netty简介

Java Netty简介

时间:2023-07-20 21:02:36浏览次数:46  
标签:Netty http NIO 框架 简介 IO Java

Netty和Mina是Java世界非常知名的通讯框架。它们都出自同一个作者,Mina诞生略早,属于Apache基金会,而Netty开始在Jboss名下,后来出来自立门户netty.io(http://netty.io/)。

Netty是一个基于JAVA NIO类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。

 

NIO

Netty 是基于NIO的,那NIO又如何呢?

Java在JDK 1.4版本之后才开始支持异步IO,其实NIO也是使用操作系统的IO模型,但在各操作系统上的实现方式也不太一样

在Windows系统使用的是Select模型,而不是性能更高的IOCP,原因就是并非所有Windows都支持IOCP,IOCP在windows NT 3.5中被引入,只支持WindowsNT和windows 2000。(参考:

在Linux系统上使用的是多路复用IO,JDK 6之前用的是poll模型,JDK 7中使用epoll。(参考:)

AIO

JDK 7中出现了AIO,其实AIO就是NIO的增强版,因为JDK 6之前用的是poll,JDK 7用的是epoll,而epoll就是poll的增强版。

更多操作系统支持的IO模型请参考:

阻塞与非阻塞、同步与异步 I/O模型

 

Java NIO原理 图文分析及代码实现
http://weixiaolu.iteye.com/blog/1479656

 

使用Netty的优点

  • 避免之前同步IO的性能缺点;
  • 简化直接使用NIO的复杂度;

更多请参考:

对于 Netty 的十一个疑问
http://mp.weixin.qq.com/s?__biz=MjM5MzA0ODkyMA==&mid=200882593&idx=1&sn=a6ac2c3f3abcaeda478abfc7cd6b1e4f

 

使用Netty的案例

  • Hadoop的RPC框架Avro使用Netty作为通信框架。它默认采用Netty进行跨节点通信,它的Netty Service基于Netty框架二次封装实现。
  • 阿里分布式服务框架Dubbo的RPC框架使用Dubbo协议进行节点间通信。阿里分布式服务框架Dubbo的RPC框架使用Dubbo协议进行节点间通信。

Netty的性能

 

 

Netty系列之Netty高性能之道

NIO系列6:流行 NIO Framework netty 和 mina 性能测评与分析

tomcat、netty以及nodejs的helloworld性能对比

100万并发连接服务器笔记之Java Netty处理1M连接会怎么样
http://www.blogjava.net/yongboy/archive/2013/05/13/399203.html

Java与与Erlang、C相比,比较麻烦的事情,需要在程序一开始就得准备好它的堆栈到底需要多大空间,换个说法就是JVM启动参数设置堆内存大小,设置合适的垃圾回收机制,若以后程序需要更多内存,需停止程序,编辑启动参数,然后再次启动。总之一句话,就是麻烦。单单JVM的调优,就得持续不断的根据检测、信息、日志等进行适当微调。

 

参考资料:

100万并发连接服务器笔记之Java Netty处理1M连接会怎么样
http://www.blogjava.net/yongboy/archive/2013/05/13/399203.html

Netty源码解读(一)概述
http://ifeve.com/netty1/

Netty教程—Part1—介绍
http://www.importnew.com/7669.html

Netty系列之Netty高性能之道

Netty 学习笔记

《Netty 权威指南》—— 4种IO的对比
http://ifeve.com/netty-2-5/ 

Netty NIO 框架性能压测 – 长链接

标签:Netty,http,NIO,框架,简介,IO,Java
From: https://blog.51cto.com/u_15588078/6791410

相关文章

  • 字符串加减乘除 java
    字符串加减乘除实现方法概述本文将介绍如何在Java中实现字符串的加减乘除操作。在Java中,字符串是不可变的,因此不能直接对字符串进行加减乘除操作,但可以通过一些方法来实现字符串的加减乘除功能。流程下面是实现字符串加减乘除的流程:步骤描述1创建两个要操作的字符串......
  • 自动化测试代码 java
    自动化测试代码Java实现流程自动化测试在软件开发过程中扮演着重要的角色,它可以帮助我们提高测试效率,并保证软件质量。在Java开发中,我们可以使用一些成熟的框架和工具来实现自动化测试。下面我将介绍一下实现自动化测试代码的流程,并提供相应的代码示例。流程概览下面的表格展......
  • 抓取网页图片上的文字javascript
    抓取网页图片上的文字流程以下是实现“抓取网页图片上的文字”所需要的步骤和代码示例:步骤做什么代码示例1安装必要的库和工具2下载网页图片3图片预处理4使用OCR技术抓取文字步骤1:安装必要的库和工具在进行文字抓取前,首先需要安装几个必要的库和......
  • 指定ip请求java api
    实现"指定IP请求JavaAPI"的步骤作为一名经验丰富的开发者,我将向你介绍如何实现"指定IP请求JavaAPI"的方法。下面是整个流程的步骤:步骤描述1.获取APIURL2.创建HttpURLConnection对象3.设置请求方法4.设置请求头部5.设置请求参数6.发送请求7.......
  • NoSuchMethodError: javax.servlet.http.HttpServletRequest.getHttpServletMappi
    NoSuchMethodError:javax.servlet.http.HttpServletRequest.getHttpServletMapping1.介绍在Java应用程序中,可能会遇到javax.servlet.http.HttpServletRequest.getHttpServletMapping方法引发的NoSuchMethodError异常。这个异常通常是由于servletAPI版本不兼容导致的。本文将详......
  • No suitable Java Virtual Machine could be found on your system. The version
    Java虚拟机简介与安装什么是Java虚拟机?Java虚拟机(JavaVirtualMachine,简称JVM)是一种能够运行Java字节码的虚拟机。它是Java语言的核心,提供了跨平台的特性,使得一次编写的Java代码可以在不同的操作系统上运行。JVM有两个主要的任务:将Java源代码编译成字节码。在各个操作系统上......
  • Keyboard在java中怎么使用
    使用Keyboard在Java中获取用户输入问题描述在Java中,如果我们希望与用户进行交互,获取用户的输入,那么就需要使用键盘输入。本文将介绍如何使用Java中的Keyboard类来获取用户的键盘输入。解决方案Java中的Keyboard类是从JDK1.5版本开始引入的,它提供了一种简单的方法来读取从键盘......
  • No qualifying bean of type 'java.lang.String' available: expected at least 1
    Spring中的依赖注入在Spring框架中,依赖注入是一种设计模式,它允许将对象的依赖关系从代码中解耦,并由框架来负责管理这些依赖关系。通过依赖注入,我们可以更容易地编写可维护和可测试的代码。什么是依赖注入?在传统的编程模型中,对象通常通过创建其他对象的实例来满足其依赖关系。这......
  • Java注释 TODO
    Java注释TODO在Java编程中,我们经常会遇到一些需要后续处理的任务,这些任务可能是代码的改进、错误修复或者功能扩展。为了能够更好地管理和追踪这些任务,Java提供了一种特殊的注释标记,即TODO注释。TODO注释的作用TODO注释是一种特殊的注释形式,用于标记需要后续处理的任务。它可以......
  • Java中怎么让数字显示彩色
    项目方案:Java数字显示彩色1.项目背景在Java编程中,数字通常以普通的黑色文本显示。然而,在某些情况下,我们希望能够以彩色的方式展示数字,以增强用户体验或突出重要信息。本项目旨在探索如何在Java中实现数字的彩色显示。2.技术方案为了实现数字的彩色显示,我们可以利用Java的控制......