`
huangyongxing310
  • 浏览: 494559 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Netty 、Java NIO工作原理与简介

阅读更多
Netty 、Java NIO工作原理与简介

本质:JBoss做的一个Jar包
目的:快速开发高性能、高可靠性的网络服务器和客户端程序
优点:提供异步的、事件驱动的网络应用程序框架和工具
通俗的说:一个好使的处理Socket的东东

1.Netty是一种在Java NIO基础上实现的一种基于SocketChannel(TCP 网络IO)、ServerSocketChannel(TCP 网络IO)的一种Java NIO框架程序,方便快速开发高性能、高可靠性的网络服务器和客户端程序的。
2.说白了就是Java NIO的一种工作模式,不过进行了封装更方便使用的jar包。


Java NIO
1.NIO是一种应用级别的异步处理。
2.io方式是会使应用阻塞的,应用运行到那里就一直阻塞,直到得到结果返回为止,要实现多连接处理就必须要使用多线程(一个连接对应一个线程),但创建线程要消耗内存,影响性能。
3.NIO就是通过单线程或几个线程来完成很多的连接,减少创建大量线程的内存消耗。
4.NIO接收到连接时会连接变成一种模型(Channels),并注册到管理这种模型(Channels)的管理者(Selectors),当有数据与这个连接交互时,管理者(Selectors)就会通知模型(Channels),通过回调模型(Channels)定义好的处理函数或接口。
5.这样就可以在服务端实现一个线程处理多个连接的工作模式了。
6.NIO一般应用于连接是少量数据交互的情况下,如果连接是进行大量数据交互的就不适用于这种模式了(数据大会和回调占用时间长(影响交互响应性能))
7.NIO支持的Channels有很多:FileChannel(文件IO)、DatagramChannel(UDP 网络IO)、SocketChannel(TCP 网络IO)、ServerSocketChannel(TCP 网络IO)


Java NIO提供了与标准IO不同的IO工作方式:
1.Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。
2.Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。
3.Selectors(选择器):Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。


Java NIO 由以下几个核心部分组成:Channels、Buffers、Selectors
Channel 和 Buffer
1.所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。 数据可以从Channel读到Buffer中,也可以从Buffer 写到Channel中。

Selector
1.Selector允许单线程处理多个 Channel。如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便。
2.要使用Selector,得向Selector注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,


工作原理:
1.NIO就是应用层实现的一种基于事件通知的工作模式,应用层通过监听端口,当端口有数据到达时,系统会调用应用层的回调来通知应用。
2.应用在通知处理里面再实现对数据解析后将数据通知到注册在该应用里面的通知处理接口(就是回调)。
3.Selectors就是应用的回调函数(系统级的),Channels and Buffers是要往Selectors注册(当然也有它的回调(应用级的)),当Selectors接收到数据就轮询注册到里面的Channels,符合要求的就调用回调(应用级的)函数进行处理。




Netty
NioEventLoopGroup 是用来处理I/O操作的多线程事件循环器

NioEventLoopGroup实际上就是个线程池
NioEventLoopGroup在后台启动了n个NioEventLoop来处理Channel事件
每一个NioEventLoop负责处理m个Channel

https://blog.csdn.net/zxhoo/article/details/17634683(NioEventLoopGroup继承层次结构)
http://www.cnblogs.com/stevenczp/p/7581940.html(Netty源码学习(二)NioEventLoopGroup)

NIO支持高并发(多链接),因为机器能支持的最大线程数是有限的.

Netty的传输快其实也是依赖了NIO的一个特性——零拷贝。

Netty主要应用于服务端,实现高并发的功能,当然客户端也可以使用netty来实现异步接收消(如接收推送)

也可以实现RPC
https://www.cnblogs.com/jietang/p/5615681.html(谈谈如何使用Netty开发实现高性能的RPC服务器)

https://blog.csdn.net/qq_38182963/article/details/79764922(自己用 Netty 实现一个简单的 RPC)

netty的ChannelGroup分组进行广播,也可以指定向那个channel发送消息



netty实现websocket
https://blog.csdn.net/weixin_39168678/article/details/79453585
https://www.cnblogs.com/chaizezhao/articles/5291608.html
https://www.cnblogs.com/ggwow/p/7994213.html
https://www.cnblogs.com/tohxyblog/p/7771200.html






在Netty5的线程模型中,是由多个Selecotr在监听IO就绪事件。
https://blog.csdn.net/hao707822882/article/details/39544553(揭示了使用两个线程池的原因)


参考原文(Netty应用例子):http://lippeng.iteye.com/blog/1907279
参考原文(Netty应用例子):http://blog.csdn.net/kobejayandy/article/details/11493717
参考原文(Java NIO):http://www.iteye.com/magazines/132-Java-NIO
参考原文(java nio的使用示例):http://www.jb51.net/article/48520.htm
参考原文(java nio的使用示例):http://www.cnblogs.com/gaotianle/p/3325451.html

http://ifeve.com/netty5-user-guide/(Netty 5用户指南)
分享到:
评论

相关推荐

    java NIO技巧及原理

    Java NIO(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 Blocking I/O(IO)相比,提供了更加高效的数据传输方式。在Java NIO中,"新"主要体现在非阻塞和多路复用这两个特性上,这使得NIO更适合于...

    Java NIO框架Netty教程.pdf

    ### Java NIO框架Netty教程知识点解析 #### 一、Netty框架简介 Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高...这对于理解Netty的工作原理和如何在实际项目中应用Netty都是非常有帮助的。

    NIO+Netty5视频教程与Netty源码剖析视频教程

    通过源码剖析,学习者将了解Netty如何利用Java NIO库实现高效的I/O操作,包括Channel、EventLoop、Handler、ByteBuf等关键组件的工作原理,以及Pipeline的事件传播机制。此外,还会涉及Netty的线程模型,如BossGroup...

    Java网络编程 NIO Netty

    Java网络编程领域中,NIO(Non-blocking Input/Output,非阻塞I/O)和Netty框架是两个关键概念。NIO是一种I/O模型,它与传统的BIO...理解NIO的基本原理和Netty的高级特性,对于提升Java网络编程能力具有重大意义。

    Java_NIO框架Netty教程.pdf

    Java NIO(New IO)框架是Java平台中用于处理I/O操作的一种非阻塞I/O模型,相较于...通过阅读"Java NIO框架Netty教程.pdf",你可以深入理解Netty的工作原理,并学会如何在实际项目中应用Netty,提升你的网络编程能力。

    跟闪电侠学Netty:Netty即时聊天实战与底层原理-book-netty.zip

    7. **Netty底层原理**:探讨Netty如何利用Java NIO实现异步非阻塞I/O,以及零拷贝技术的工作机制,帮助读者理解Netty的高效性。 8. **案例分析**:通过实际项目案例,展示Netty在实际场景中的应用,如P2P下载、...

    java nio 原理浅析

    Java NIO(非阻塞I/O)是一种在Java中实现高效I/O操作的方式,相比于传统的BIO(阻塞I/O),NIO具有更...虽然本文没有深入到Netty的源码层面,但对于理解Netty的工作原理和如何利用它来构建高性能的网络应用已经足够。

    【项目实战】Netty源码剖析&NIO;+Netty5各种RPC架构实战演练三部曲视频教程(未加密)

    通过对Netty源码的深入剖析以及NIO技术的学习,我们不仅能够理解Netty内部的工作原理,还能掌握如何利用Netty高效地开发高性能的网络应用程序。尤其是在RPC架构领域,Netty凭借其强大的功能和灵活的设计成为了构建...

    netty原理的讲解

    总而言之,Netty通过优化的NIO模型、Reactor模式和高度可定制的处理流程,为Java开发者提供了构建高性能网络应用的强大工具。学习Netty不仅需要理解IO流的演变,还需要掌握其独特的设计理念和实现机制。通过深入学习...

    java nio&netty系列之三netty网络模型代码以及简化版代码示例

    Java NIO(New IO)是Java 1.4版本引入的一种新的IO API,用来替代标准的Java IO API。NIO提供了非阻塞的I/O操作,可以提高在处理多个连接时的性能...结合源码阅读和实践,可以更深入地理解Netty的工作原理和优化技巧。

    reverse-proxy:通过Netty基于Java NIO的https代理服务器的实现

    通过Netty基于Java NIO的https代理服务器的实现。 这是一个简单的工作原理: 要通过浏览器对其进行测试,我们将需要设置一个虚拟主机名,如下所示: 127.0.0.1 test.localdomain 这样浏览器就能将SNI发送到我们...

    netty原理及例子

    - **NIO(Non-blocking I/O)**:Netty是基于Java NIO构建的,NIO允许单线程处理多个通道,减少了线程创建和销毁的开销。 - **Channel**:Netty中的核心概念,表示网络连接,如TCP连接或UDP套接字。 - **Event...

    最透彻的的Netty高性能原理和框架架构解析,使用文件和图形详细描述了netty的原理

    首先,Netty 的高性能原理可以从其对 JDK 原生 NIO 的改进上体现出来。JDK 原生 NIO 程序存在一些问题,如类库和 API 繁杂、需要具备其他的额外技能、可靠性能力补齐工作量和难度都非常大、JDK NIO 的 Bug 等。Netty...

    Netty实战 电子版.pdf_java_netty_服务器_

    《Netty实战》是针对Java开发者的一本技术指南,它深入介绍了如何利用Netty这个高性能、异步事件驱动的...通过阅读这本书,你可以深入理解Netty的工作原理,并将这些知识应用到实际项目中,提升你的服务器开发技能。

    Netty实现原理浅析

    Netty是一款由JBoss推出的高效且功能丰富的Java NIO框架,旨在简化网络编程并提高性能。为了更好地理解Netty的工作原理,我们首先需要了解它的整体架构。Netty的总体结构图清晰地展示了各个组成部分之间的关系及其...

    Netty权威指南 第2版 带书签目录 完整版

    《Netty 权威指南(第2 版)》适合架构师、设计师、软件开发工程师、测试人员以及其他对JavaNIO 框架、Netty 感兴趣的相关人士阅读,通过《Netty 权威指南(第2 版)》的学习,读者不仅能够掌握Netty 基础功能的使用...

    精通并发与netty视频教程(2018)视频教程

    19_Apache Thrift原理与架构解析 20_通过Apache Thrift实现Java与Python的RPC调用 21_gRPC深入详解 22_gRPC实践 23_Gradle Wrapper在Gradle项目构建中的最佳实践 24_gRPC整合Gradle与代码生成 25_gRPC通信示例与JVM...

    10道Java高级必备的Netty面试题!.zip

    【标签】"java 面试"进一步确认了这是一份与Java面试相关的学习资源,特别提到了Netty,意味着面试者需要对Java有深入理解,并且需要熟悉或精通Netty框架。 【压缩包子文件的文件名称列表】中的"10道Java高级必备的...

    精通并发与netty 无加密视频

    第19讲:Apache Thrift原理与架构解析 第20讲:通过Apache Thrift实现Java与Python的RPC调用 第21讲:gRPC深入详解 第22讲:gRPC实践 第23讲:Gradle Wrapper在Gradle项目构建中的最佳实践 第24讲:gRPC整合...

    自己手写nio和netty,不建议下载

    手写NIO和Netty意味着尝试从零开始实现这些功能,这可以帮助深入理解底层原理,但通常并不推荐,因为Netty已经经过了大量的优化和测试,而且社区支持强大,可以直接使用而无需重新造轮子。 总之,NIO是一种改进的I/...

Global site tag (gtag.js) - Google Analytics