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. 增强篇3 SAP表字段增强

    有两种方式:  Include  和 Append 1.INCLUDE一般都是标准预留的增强: 以CO01生产订单增强字段为例 在表AUFK中INCLUDE的结构“CI_AUFK”加入自定义字段 保存 ...

  2. 如何做ui自动化---步骤详解

    第一步: 得到功能测试的常规用例,查看是否可以进行自动化,要明确,自动化不是为了自动化而自动化,自动化是节省人力,主要做回归测试,如果变动性特别大,不建议做自动化,具体可查看其它文章“什么适合做自动化 ...

  3. Spring Boot应用的打包和部署

    传统的Web应用在发布之前通常会打成WAR包,然后将WAR包部署到Tomcat等容器中使用,而通过前面的学习我们已经知道,Spring Boot应用既能以JAR包的形式部署,又能以WAR包的形式部署. ...

  4. java-socket-demo的实现

    目录 前言 IO通讯模型 IO通讯模型简介 1. 阻塞式同步IO 2. 非阻塞式同步IO 3. 多路复用IO(阻塞+非阻塞) 4. 异步IO Java对IO模型的支持 注意点及实现方案 TCP粘包/拆 ...

  5. 高级UI-FloatingActionButton

    FloatingActionButton为悬浮按钮,就是常见的那种悬浮在控件上,可以调出其他菜单的按钮 FloatingActionButton的特有属性 app:backgroundTint 按钮的 ...

  6. nginx 配置参数详细说明

    #定义Nginx运行的用户和用户组 user www www; # #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; # #全局错误日志定义类型,[ debu ...

  7. Beginning Linux Programming 学习--chapter 11 Processes and Signals

     What's process--什么是进程? The UNIX standards, specifically IEEE Std 1003.1, 2004 Edition, defines a pr ...

  8. Copy-On-Write技术

    通俗的解释,假定多方需要使用同一个资源时,没有必要为每一方都创建该资源的一个完整的副本,反而令多方共享这个资源,当某方需要修改资源的某处时,利用引用计数,把该处复制一个副本,再把跟新的内容写入该副本中 ...

  9. ZooKeeper 相关问题

    [为什么部署个数是奇数个?] zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的.即 2n 个机器的集群,最多可以容忍 n-1 个机器不可用,这个容忍度与 ...

  10. 快速搭建ssh项目

    环境:oracle11g.myeclipse2014 首先在web项目中添加spring框架 现在已经添加完spring框架了 然后我们开始添加Hibernate框架 到这一步Hibernate框架就 ...