Netty(一):入门篇
匠心零度 转载请注明原创出处,谢谢!
说在前面
上篇文章对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可以跑起来的时候,进行断点啥的也好进行学习了。
如果读完觉得有收获的话,欢迎点赞、关注、加公众号【匠心零度】,查阅更多精彩历史!!!

Netty(一):入门篇的更多相关文章
- <Netty>(入门篇)TIP黏包/拆包问题原因及换行的初步解决之道
熟悉TCP编程的读者可能都知道,无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑TCP底层的粘包/拆包机制.木章开始我们先简单介绍TCP粘包/拆包的基础知识,然后模拟一个没有考虑TCP ...
- netty深入学习之一: 入门篇
netty深入学习之一: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java NI ...
- netty深入学习之中的一个: 入门篇
netty深入学习之中的一个: 入门篇 本文代码下载: http://download.csdn.net/detail/cheungmine/8497549 1)Netty是什么 Netty是Java ...
- (入门篇 NettyNIO开发指南)第三章-Netty入门应用
作为Netty的第一个应用程序,我们依然以第2章的时间服务器为例进行开发,通过Netty版本的时间服务报的开发,让初学者尽快学到如何搭建Netty开发环境和!运行Netty应用程序. 如果你已经熟悉N ...
- Scala进阶之路-并发编程模型Akka入门篇
Scala进阶之路-并发编程模型Akka入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Akka Actor介绍 1>.Akka介绍 写并发程序很难.程序员不得不处 ...
- Membership三步曲之入门篇 - Membership基础示例
Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 - Membership基础示例 Membership三步曲之进阶篇 - 深入剖析Pro ...
- spring boot(一):入门篇
构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- 1. web前端开发分享-css,js入门篇
关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...
- 一个App完成入门篇(七)- 完成发现页面
第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...
- [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界
本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...
随机推荐
- Qt 共享库(动态链接库)和静态链接库的创建及调用
前言: 编译器 Qt Creator, 系统环境 win7 64 位 1.创建共享库: 新建文件或项目->选择 Library 和 c++ 库->选择共享库->下一步(工程名为 sh ...
- castle之动态代理
动态代理 DynamicProxy,这里说的动态代理是直接使用Castle.net 中提供的,并非自己实现的,因为别人写的很好,拿着用就行了. 动态代理的工作模式: 一般我们获取一个类型的实例都是通过 ...
- Nginx安装手册
前提是搭建yum安装环境,见前面的教程资料 Nginx安装手册1 nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos6.5作为安装环境. gcc 安装ngin ...
- JXLS 2.4.0系列教程(二)——循环导出一个链表的数据
请务必先看上一篇文章,本文在上一篇文章的代码基础上修改而成. JXLS 2.4.0系列教程(一)--最简单的模板导出 上一篇文章我们介绍了JXLS和模板导出最简单的应用,现在我们要更进一步,介绍在模板 ...
- ASP.NET没有魔法——ASP.NET OAuth、jwt、OpenID Connect
上一篇文章介绍了OAuth2.0以及如何使用.Net来实现基于OAuth的身份验证,本文是对上一篇文章的补充,主要是介绍OAuth与Jwt以及OpenID Connect之间的关系与区别. 本文主要内 ...
- [OpenCV学习笔记2][Mat数据类型和操作]
[Mat数据类型和基本操作] ®.运行环境:Linux(RedHat+OpenCV3.0) 1.Mat的作用: Mat类用于表示一个多维的单通道或者多通道的稠密数组.能够用来保存实数或复数的向量.矩阵 ...
- Android 通知 相关api记录
记录帖 通知(Notification) 的API 1.使用getSystemService()方法获取系统服务,参数接收一个字符串来确定获取具体的服务,使用通知传入Content.NOTIFICAT ...
- Visio绘制用例图问题集锦
1.Visio画UML用例图没有include关系的解决方法 发现Visio UML用例里面找不到include关系,即"箭头"+"<<include> ...
- protobuf java基础
1:定义proto文件: 以一个地址薄为例,从建立一个.proto文件开始,为需要序列化的数据接口加入一个message属性,在message里面,为每一个字段指定名称和类型(算是IDL吧),如下 ...
- 程序员之殇 —— One program, One king (血月)
Are we living in the time of the end? (程序员的时代是否已经终结了?) 最近,我时常问自己这个问题. 刚读完了一个美国博士的论文,UDT (UDP-based D ...