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框架,消息中间件,分布式通信中间件线上的广泛验证,健壮性强大。

相关推荐

50个Python练手项目,拿去过冬吧!

10个不到500行代码的超牛Python练手项目

10个精彩Python视频教程整理,10种新技能轻松Get!

30本Python学习参考书,从入门到大师全了!

大牛推荐的10本学习Java必看书

如何开始使用Java机器学习

再别说找不到C++练手项目,这20个拿去不谢!

JAVA工程师必学技能,进阶&涨薪的推进器!这份实战教程请收下的更多相关文章

  1. 最常用的CountDownLatch, CyclicBarrier你知道多少? (Java工程师必会)

    CountdownLatch,CyclicBarrier是非常常用并发工具类,可以说是Java工程师必会技能了.不但在项目实战中经常涉及,而且在编写压测程序,多线程demo也是必不可少,所以掌握它们的 ...

  2. Python爬虫工程师必学——App数据抓取实战 ✌✌

    Python爬虫工程师必学——App数据抓取实战 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统 ...

  3. Python爬虫工程师必学APP数据抓取实战✍✍✍

    Python爬虫工程师必学APP数据抓取实战  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  4. Python爬虫工程师必学——App数据抓取实战

    Python爬虫工程师必学 App数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  5. java开发必学知识:动态代理

    目录 1. 引言 2. 代理模式及静态代理 2.1 代理模式说明 2.2 静态代理 2.3 静态代理局限性 3. 动态代理 3.1 JAVA反射机制 3.2 JDK动态代理 3.2.1 JDK动态代理 ...

  6. 开发小白可以一年涨薪10w?这份java文档功不可没,学透你也可以

    靠这份文档,跳槽涨薪10K 金九银十的时候我分享了一份面试文档给我的兄弟,没想到这哥们2个月之内斩获数个BAT的offer, 最后选择了一个他最想要去的公司,既然有这么好的效果,我就打算把这份文档分享 ...

  7. Linux运维工程师必学必备的8项IT技能

    如果你在学习Linux,那么强烈推荐你选择RHEL和Centos作为学习的Linux发行版本,在公司及企业当中他们是使用最多的,毕竟学习除了本身是爱好,其次也是为了就业.Centos是RHEL的克隆版 ...

  8. java必学技能

    一:系统架构师是一个最终确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节.扫清主要难点的技术人员.主要着眼于系统的“技术实现”.因此他/她应该是特定的开发平台.语言.工具的大师 ...

  9. java工程师需要学什么

    成为一名Java高级工程师你需要学什么 宏观上: 1.技术广度方面至少要精通多门开源技术吧,研究过struts\spring等的源码. 2.项目经验方面从头到尾跟过几个大项目,头是指需求阶段,包括需求 ...

随机推荐

  1. PP篇7 生产替代料齐套后处理

    扫描可关注本人技术分享公众号,与您一起学习新知! 对于计划订单和生产订单, 当存在替代料的时候,完成齐套性检查后,按照可齐套量进行拆单,并删除不能齐套的替代料(有个删除规则).不能齐套就按照优先级最高 ...

  2. kubernetes 【版本】

    kubernetes本身是一个集群,我们所说的kubernetes版本实际上指的是集群各个组件的版本. 有哪些组件有版本呢? https://kubernetes.io/docs/setup/rele ...

  3. 【分布式一致性】etcd

    etcd: https://jimmysong.io/kubernetes-handbook/concepts/etcd.html 什么是 分布式一致性: http://thesecretliveso ...

  4. HDU1237 简单计算器 栈

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237 题目大意:读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 题目分 ...

  5. SpringMVC:学习笔记(11)——依赖注入与@Autowired

    SpringMVC:学习笔记(11)——依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...

  6. element组件 MessageBox不能显示确认和取消按钮,记录正确使用方法!

    这里是局部引入 调用方式:

  7. luffy项目搭建流程(Django前后端分离项目范本)

    第一阶段: 1.版本控制器:Git      2.pip安装源换国内源    3.虚拟环境搭建        4.后台:Django项目创建 5.数据库配置              6.luffy前 ...

  8. javaFX 整合 maven

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  9. 手把手带你入门神秘的RxJava

    1.什么是RxJava• Rx是Reactive Extensions的简写,翻译为响应的扩展.也就是通过由一方发出信息,另一方响应信息并作出处理的核心框架代码. • 该框架由微软的架构师Erik M ...

  10. js取小数点后两位数的方法

    四舍五入以下处理结果会四舍五入:toFixed( ) var num =2.446242342; num = num.toFixed(2); // 输出结果为 2.45 不四舍五入以下处理结果不会四舍 ...