Netty快速上手:Netty没有你想象的那么难

本文旨在帮助读者快速掌握Netty的基础知识,包括Netty的NIO模型、Java NIO、零拷贝原理以及Netty的工作流程。文章首先介绍了NIO的四种模型,接着详细讲解了Java NIO的核心组件:Channel、Buffer和Selector。然后,文章阐述了Linux中的NIO实现,如epoll,并探讨了零拷贝技术,包括mmap()和sendfile()。在Netty部分,文章讨论了Netty如何实现零拷贝,以及Netty的线程模型和工作原理。此外,还提到了Netty的BootStrap和ServerBootstrap,以及出站和入站的概念。最后,文章简要提及了TCP粘包问题及其解决方案。
摘要由CSDN通过智能技术生成

该文章是Netty相关文章。目的是让读者能够快速的了解netty的相关知识以及开发方法。因此本文章在正式介绍Netty开发前先介绍了Netty的前置相关内容:线程模型,JavaNIO,零拷贝等。本文章以大纲框架的形式整体介绍了Netty,希望对读者有些帮助。文中图片多来自于百度网络,如果有侵权,可以联系我进行删除。内容若有不当欢迎在评论区指出。

Netty

netty是由JBOSS提供的一个Java开源框架,是一个异步的,基于事件驱动的网络应用框架,用以快速开发高性能,高可靠性的网络IO程序.

NIO模型

  1. 阻塞IO:发起请求就一直等待,直到数据返回。在IO执行的两个阶段都被block了

  1. 非阻塞IO:应用程序不断在一个循环里调用recvfrom,轮询内核,看是否准备好了数据,比较浪费CPU

  1. io复用:一个或一组线程处理多个连接可以同时对多个读/写操作的IO函数进行轮询检测,直到有数据可读或可写时,才真正调用IO操作函数

  1. 信号驱动IO:事先发出一个请求,当有数据后会返回一个标识回调,然后通过recvfrmo去请求数据

  1. 异步io:发出请求就返回,剩下的事情会异步自动完成,不需要做任何处理

异步 I/O 与信号驱动 I/O 的区别在于,异步 I/O 的信号是通知应用进程 I/O 完成,而信号驱动 I/O 的信号是通知应用进程可以开始 I/O。

Java NIO

  1. 三大核心Channel(通道),Buffer(缓冲区),Selector(选择器)。数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中,Selector用于监听多个通道的事件。
  2. Channel:是双向的,既可以用来进行读操作,又可以用来进行写操作

FileChannel 文件IO,不支持非阻塞模式,无法同Selector一同使用

DatagramChannel UDP

SocketChannel TCP

ServerSocketChannel TCP

Buffer:它通过几个变量来保存这个数据的当前位置状态:

capacity:缓冲区数组的总长度

position:下一个要操作的数据元素的位置

limit:缓冲区数组中不可操作的下一个元素的位置

  1. 向Buffer中写数据:

从Channel写到Buffer (fileChannel.read(buf))

通过Buffer的put()方法 (buf.put(…))

从Buffer中读取数据:

从Buffer读取到Channel (channel.write(buf))

使用get()方法从Buffer中读取数据 (buf.get())

  1. flip():写模式下调用flip()之后,Buffer从写模式变成读模式。limit设置为position,position将被设回0

clear()方法:position将被设回0,limit设置成capacity,Buffer被清空了,但Buffer中的数据并未被清除。

compact():将所有未读的数据拷贝到Buffer起始处。然后将position设到最后一个未读元素正后面,limit设置成capacity,准备继续写入。读模式变成写模式

Buffer.rewind()方法将position设回0,所以你可以重读Buffer中的所有数据

  1. Selector:Selector一起使用时,Channel必须处于非阻塞模式下。通过channel.register,将channel登
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值