匠心零度 转载请注明原创出处,谢谢!
说在前面
上篇文章对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.1(http://netty.io/wiki/new-and-noteworthy-in-4.1.html),先了解下有那些大概的变动(不要认为之前没用过,看就没有必要,看看也是它的一些亮点,后续可能要重点学习了解思考的)
主要改变:
- Android support
- ChannelHandlerContext.attr(..) == Channel.attr(..)
- Channel.hasAttr(...)
- Easier and more precise buffer leak tracking
- PooledByteBufAllocator as the default allocator
- Globally unique channel ID
- EmbeddedChannel usability
- Ability to use Executor instead of ThreadFactory
- Class loader friendliness
- ByteBufAllocator.calculateNewCapacity()
备注:具体详情记得去官网看看: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可以跑起来的时候,进行断点啥的也好进行学习了。
如果读完觉得有收获的话,欢迎点赞、关注、加公众号【匠心零度】,查阅更多精彩历史!!!