【前言】
原文:https://juejin.cn/post/7067039747180331022
netty
作为Java
领域中优秀的网络编程框架
,其设计思想
,代码实现
都非常值的我们去学习,同时,更好的了解netty
的概念
、设计
、细节
后,我们使用起来
也就会更踏实
、更称手
,从而让netty这件神兵利器在我们手中发挥出最大的威力!!!
netty简介
What is netty?
Netty 是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端
netty的优势
API
使用简单,使用&开发 门槛低- 预置多种编解码器,支持多种主流协议,亦可定制私有协议。
- 基于灵活且可扩展的事件模型
- 高度可定制的线程模型,真正的无连接数据报套接字支持(自 3.1 起)
- 解决了
Java
中NIO使用起来繁琐,空轮询等等问题 - 社区活跃,经历无数个商业&开源项目验证,稳定性好
- 完整的
SSL/TLS
,StartTLS
支持 - 高吞吐,低时延,更少的资源,减少不必要的内存拷贝
- … 总之一句话: 牛x。
netty架构
- 图中可以了解到
netty
包含了事件模型
,统一的API
,零拷贝
,以及其丰富的协议支持
netty绕不开的知识点之 IO模型
- 然而,说起
netty
的IO模型,我们就不得不说到
Unix
的IO模型
Unix系统五种I/O模型
- 下面我们以
UDP
的socket
读为例来介绍一下五种I/O模型(但是在介绍I/O模型之前,我们需要了解下Unix
系统函数recvfrom
)
recvfrom
系统函数介绍
-
说明:
recvfrom函数
用来从一个套接口(有的文献称为套接字)接收消息,也可以用来在一个面向连接(如TCP
)或非连接(UDP
)的套接口上接收数据(但是大部分时候都是在UDP协议
中使用) -
recvfrom
函数在Java中的应用 (可以看到Java中是通过调用c语言来调用的recvfrom函数),感兴趣可以看下系统函数accept
在Java中都有哪几个地方使用到了。