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的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...
随机推荐
- Spring框架学习笔记(6)——bean的继承与依赖
一.bean的继承 Spring通过bean标签的parent属性来实现bean的继承,这个继承的概念只存在于配置层面,也就是说bean只会继承其父bean的属性值. 父bean可以通过abstrac ...
- javascript如何处理多级的实时监听
今日工作中遇到需求,要求js代码对表单中的input内容进行实时监听,当input中的值改变时触发一些事件. 按照常规思维,代码很快写完了. $(function () { $("#inpu ...
- echarts图表里label文字过长换行的方法
在做一些图标时,有时会出现显示文字过长的问题,需要将其按照指定的字数换行,像下图这样 而echarts没有提供换行的方法,但是可以使用fomatter方法进行设置,代码如下 formatter: fu ...
- C++输出二进制文件和文本文件
所谓二进制文件和文本文件对于字母而言没有什么不同,都是存储该字母的ASCII码值.能引起不同的是数字和一些排版用符号的格式. 数字在二进制文件中会存储该数字的值,而文本文件中则首先将该数字视为字符量, ...
- [国嵌笔记][026][ARM伪指令]
ARM机器码 1.汇编程序通过汇编器变成机器码,然后才能在ARM处理器上运行 2.ARM机器码是一个32位的数,被分成了多个段,每个段都有各自的含义 3.格式: cond:表示条件(4位) I:表示源 ...
- Nginx的启动(start),停止(stop)命令
http://blog.csdn.net/u010739551/article/details/51654859 查看Nginx的版本号:nginx -V 启动Nginx:start nginx 快速 ...
- SSL协议之数据加密过程详解
前言 总括: 原文博客地址:SSL协议之数据加密过程详解 知乎专栏&&简书专题:前端进击者(知乎)&&前端进击者(简书) 博主博客地址:Damonare的个人博客 生活 ...
- XHR
xhr注入 XHR 注入技术是通过XMLHttpRequest来获取javascript的.但与eval不同的是,该机制是通过创建一个script的DOM元素,然后把XMLHttpRequest的响应 ...
- eclipse报错资料备份
一. eclipse中初始化控件出错 在添加 TextView myTextView=(TextView)this.findViewById(R.id.myTextView); Button myBu ...
- python_18_反射
什么是反射? -- 通过输入字符串来获取和修改 类(属性+方法),用字符串来映射内存对象,用于人机交互 反射有哪几种方法? -- getattr() --获取字符串 ...