Netty(一):入门篇

2018-02-14 14:11:03 +08:00
 jiangxinlingdu

匠心零度 转载请注明原创出处,谢谢!

说在前面

上篇文章对 Netty 进行了初探:Netty 初探,主要介绍了下我们为什么需要学习 netty、netty 介绍等;本篇文章接着上篇文章的内容。本篇为了方便大家快速入门、了解实践 Netty 特性、快速上手一个例子让大家有一个比较直接的认识。

主题

版本选择及说明

版本的选择,这是一个很直接但是又经常需要面对的问题,特别是开源项目的时候,我们在选择版本的时候有很多考虑,比较 jdk 各个版本选择、zookeeper 版本的选择、Tomcat 版本选择,Spring 系列版本选择等等,后续后空我们可以讨论讨论关于开源这些版本选择以及升级事宜交流,今天的重点是在 netty 版本的选择上面。

netty 目前版本说明

目前 Netty 大版本就分为三个:3.x、4.x、5.x。 我们先看看官网怎么说:

备注:推荐使用的版本是 4.x,那么我们再看看很多使用 Netty 的一些项目,的确使用的是 4.x 版本,据了解 Dubbo3.x 将会将 Netty4.0.x 升级到 4.1.x 版本。

看看官网: 备注:如果是在项目中进行使用那么我们可能会选择 4.1.x 的比如其他版本,需要考虑稳定性等,一般很少选择最新的,但是我们是来学习 netty,那么我建议就选择最新版本:4.1.21.Final 版本。,因为当我们学习完了之后,可能已经很久了,21 版本估计也稳定了,并且都是 4.1x 版本,一般仅仅是一些小的改动,就算后面选择新版本学习应该也不是特别困难。

Netty4.1.x 简单介绍

建议看官网New and noteworthy in 4.1http://netty.io/wiki/new-and-noteworthy-in-4.1.html ),先了解下有那些大概的变动(不要认为之前没用过,看就没有必要,看看也是它的一些亮点,后续可能要重点学习了解思考的)

主要改变:

备注:具体详情记得去官网看看: http://netty.io/wiki/new-and-noteworthy-in-4.1.html,这次可以大概了解下,后续有空慢慢看看。

快速入门

说了那么多了,我们来一个简单的 Demo 来简单的感受下 Netty。

maven 构建项目

新建一个 Maven 项目,之后去 github 上面找到 netty 对应的例子代码: 放到项目中,代码结构如图:

pom.xml 中添加如下内容:

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.21.Final</version>
</dependency>

稍微在原来 demo 基础上面修改了点东西,解决半包、黏包问题(后续详细介绍) 以及发送内容等信息。

我已经把代码提交到 github 上面去了,需要的小伙伴可以直接下载: https://github.com/lirenzuo/nettydemo。

运行效果截图

可以与使用 nio 写的代码进行对比,NIO 相关基础篇二,发现用 Netty 写一个 TCP 原来这么简单,都封装好了。

总结

使用 Netty 可以非常方便、快速的搭建网络开发环境,使得我们不用关心一些例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等等的问题,所以使用 Netty 进行网络开发是非常合适的,本篇只是一个入门,后续有了 Demo 可以跑起来的时候,进行断点啥的也好进行学习了。


如果读完觉得有收获的话,欢迎点赞、关注、加公众号 [匠心零度] ,查阅更多精彩历史!!!

3229 次点击
所在节点    程序员
2 条回复
MeteorCat
2018-02-14 23:59:47 +08:00
我个人感觉介绍 NIO 原理好点,由这个做入口;以前刚出来的时候什么代码概念也没有也是随便跑个类似 helloworld 就完事大吉了,实际上 NIO 的实现后来看简直就是 Java 之中网络编程精品,包括 muduo 之类其他网络框架都借鉴了这种模式,所以推荐由了解 NIO 开始
jiangxinlingdu
2019-03-01 09:55:42 +08:00
@MeteorCat 之前有写过 3 篇 nio 的,之后才写的 netty 的,可以看看我的这篇地址: http://www.jiangxinlingdu.com/thought/2017/12/26/nio3.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/430719

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX