Netty 作为互联网中间件的基石,是 JAVA 工程师进阶为高级程序员必备的能力之一。也是目前是互联网中间件领域使用最广泛最核心的网络通信框架。
Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持;无论是在互联网领域、分布式计算领域,还是通信行业,游戏领域都有广泛的应用。
今天给大家介绍的这个教程,跟你平时学习的教程不太一样。这是一个通过实战操作来学习Netty的教程。会用由浅入深的概念+代码的方式,快速让人理解并上手Netty。
因为这项技能对于JAVA工程师是非常重要的技能,学习也需要一定的基础。简单的东西没有太大价值。你需要是这样的人:
有基础的Java开发能力,自我突破的强烈欲望;具有一定Java网络编程能力,想要了解入门Netty。
知识点如下:
1:IO 基础入门
2:JAVA 网络编程
3:netty 入门
4:TCP 粘包/拆包
5:netty 编解码器
6:序列化传输
7:HTTP 服务器开发
8:深入 Netty ByteBuf
所以基本上,如果用心学完的话,收获还是会非常大的:Linux 网络模型/JAVA 原生网络编程/Netty 网络编程/HTTP 协议以及 HTTP 服务器的开发。
好啦废话不多少,上教程地址:>> http://t.cn/EozjS6O。
对于网络编程不熟悉的同学,也可以先了解下网络 I/O 的基本概念:
先来说说什么是 I/O。根据维基百科的定义,I/O 指的是输入输出,通常指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出。简而言之,从硬盘中读写数据或者从网络上收发数据,都属于 I/O 行为。
Linux 系统将所有的外部设备都看作一个文件来看待,所有打开的文件都通过文件描述符(简称 fd)来引用。而对一个 socket 的读写也会有相应的描述符,称为 socket 描述符(简称 socketfd)。描述符是一个非负整数,它指向内核中的一个结构体,由系统内核返回给进程。
在 Linux 内核中,I/O 操作通常包含两个阶段:
-
内核等待数据准备好
-
从内核复制数据到进程中
根据在这两个阶段的不同处理,Linux 提供了以下 5 种不同的 I/O 模型:
-
阻塞 I/O 模型
-
非阻塞 I/O 模型
-
I/O 复用模型
-
信号驱动式 I/O 模型
-
异步 I/O 模型
下面以 linux socket 编程的 recvfrom 函数作为系统调用来说明 I/O 模型。recvfrom 函数类似于标准的 read 函数,它的作用是从指定的套接字中读取数据报。recvfrom 会从应用进程空间运行切换到内核空间中运行,一段时间后会再切换回来。
阻塞 I/O 模型:最常用的 I/O 模型是阻塞 I/O 模型,也是最简单的模型,示意图如下:
为什么选择Netty?
-
使用JDK自带的NIO需要需要掌握很多复杂概念,代码出错率较高。
-
Netty底层IO模型,通过简单的参数更改、调节等,就可以直接从NIO模型变身为IO模型。
-
Netty的拆包解包,异常检测等机制让你从NIO的细节中解放,只专注于关心业务逻辑。
-
Netty底层对线程,selector做了较多细节优化,reactor线程模型可做到高效并发处理。
-
Netty社区活跃,遇到问题随时邮件列表或者issue。
-
Netty已经历各大rpc框架,消息中间件,分布式通信中间件线上的广泛验证,健壮性强大。
网友评论