之前开过品味性能系列、Mysql学习系列,颇为曲高和寡。都是讲理论,很少有手把手深入浅出的文章。不过确实我就这脾气,文雅点的说法叫做“伪雅”,下里巴人叫做“装逼”。

学习资料

本篇文章,打算总结下学习过程,分析学习要点。

关于netty的资料颇多,学习起来未免杂乱。对于初学者麻烦点在于难以找到重点,再此则推荐一个学习路线。

第一步 上手练习

Telnet示例(15分钟)

使用Netty创建Telnet服务

官方示例TelnetClient

推荐这个示例是因为它足够简单,简单到客户端也没有。

进阶示例(30分钟)

《Netty 实战(精髓》->第一个netty应用)

在这一章能够学习到更多细节。
  • 服务端 (serverChannel)

    • EchoServerHandler 简单的接收打印,将所接收的消息返回给发送者
    • 冲刷所有待审消息到远程节点
    • 关闭通道后,操作完成

通过这几步代码,学习 Netty 组件模型的基础 -> ChannelHandler ,它是重中之重。在稍后的第二步将会深入讲解。

  • 服务端 (server)

    • EchoServer 创建EventLoopGroup、ServerBootstrap
    • 指定 Channel
    • 设置 socket 地址使用所选的端口
    • 添加 EchoServerHandler 到 Channel 的 ChannelPipeline
    • 绑定的服务器;sync 等待服务器关闭
    • 关闭 channel 和 块,直到它被关闭
    • 关机的 EventLoopGroup,释放所有资源
  • 客户端 (client) -> Bootstrap的构建过程

http://www.jianshu.com/p/5dcbc0456376

第二步 熟悉组件

对于从零开始,想要快速上手的同学来说。只想说直接给一份代码,从安全角度出发也不敢用到生产环境。出了问题也无从下手修改。

一些实用组件推荐,请务必熟悉它们的作用。

跟着Netty 实战(精髓),看《Netty 总览

  • 学习步骤如下:
  1. Channel、ChannelHandler

  2. Encode、Decode、ByteBuf

  3. ChannelHandlerContext

  4. ReferenceCountUtil

  5. ChannelFuture、Promise

  6. ChannelPipeline、ChannelInitializer

  7. EventLoop、EventLoopGroup

  8. Attributekey

  9. CharsetUtil

    尽量,按照其在整个通信过程中所属顺位,讲解所有 Netty 主要组件。大致结构图如下:

1.Channel、ChannelHandler

熟悉ChannelInboundHandlerAdapter 抽象类里面每个方法的用处。

利用责任单一原则,把消息

2.Encode、Decode、ByteBuf

第三步 难点、要点

  1. EventLoop 数量、名称
  2. 粘包、半包
  3. 心跳 3次
  4. 重连
  5. session
  6. 不想转关键字
  7. 内存保护、溢出oom
  8. 连接数与释放
  9. 拒绝连接、黑名单、白名单
  10. Nginx
  11. fail over重试与幂等性

第四步 高阶原理

对于已经在项目中应用了 netty 的同学,更多的想学习源码,但是并不推荐直接看源码。

因为常常在没有一定设计功底的情况下,会看的不明所以。

  1. ByteBuf
  2. Channel 和Unsafe
  3. ChannelPipeline 和ChannelHandler
  4. EventLoop 和EventLoopGroup
  5. Future 和Promise

总结

更多协议类型支持,请自行根据需求搜索相应资料。

在通过github搜索相应源码参考学习时,切记分辨出事netty3.x与netty4.+版本。因为改动很大,很多资料已经没有参考价值。

分布式服务

  • 幂等性
  • fail over、fail fast、fail safe、fail back
  • 分布式事务
  • cas原子锁
  • zookeeper与paxos算法

Netty学习路线总结的更多相关文章

  1. Netty学习路线

    预研时间170517-170519 投入时间:约10h 理解度:入门①前置基础:了解基本网络协议和通信方式[图解HTTP]http://download.csdn.net/detail/niehanm ...

  2. 一位资深程序员大牛给予Java初学者的学习路线建议

    java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈 ...

  3. Java Web 学习路线

    实际上,如果时间安排合理的话,大概需要六个月左右,有些基础好,自学能力强的朋友,甚至在四个月左右就开始找工作了.大三的时候,我萌生了放弃本专业的念头,断断续续学 Java Web 累计一年半左右,总算 ...

  4. 一位资深程序员给予Java初学者的学习路线建议

    一位资深程序员给予Java初学者的学习路线建议 java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干 ...

  5. 转载:一位资深程序员大牛给予Java初学者的学习路线建议

    一位资深程序员大牛给予Java初学者的学习路线建议   java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打 ...

  6. Java后端学习,推荐书籍和学习路线

    最近在学习Java和全栈开发,推荐一些有用的书籍 书架主要针对Java后端和全栈开发用的 书籍介绍 <Spring Boot 2.0企业级应用开发实战> 本书深入浅岀地讲解了 Spring ...

  7. 写给需要的Javaer-大数据学习路线篇

    已经更新100+篇~ 关注公众号,BAT大神带你飞~ 听说你还在写Java,看Spring,看Dubbo,今天SpringCloud, 明天Dubbo3.X新版本... 10个开发9个半在写Java后 ...

  8. 程序员大佬推荐的java学习路线

    作为我的第一篇博客,我第一个想到的就是在校时就看到的这篇文章.并且在之后的时间里自己都反复观看过,有时候这不单单是一篇学习路线,也是审视自己技术能力的里程碑,和激励自己的鞭挞绳. 先来个书籍清单: & ...

  9. 【强烈推荐】可能是最适合你的 Java 学习路线和方法

    如遇链接无法打开,建议使用 https://github.com/Snailclimb/JavaGuide/blob/master/docs/questions/java-learning-path- ...

随机推荐

  1. Ubuntu下三种方法设置环境变量

    一种用于当前终端,一种用于当前用户,一种用于所有用户: 用于当前终端: 在当前终端中输入:export PATH=$PATH:<你的要加入的路径> 不过上面的方法只适用于当前终端,一旦当前 ...

  2. 利用飞儿云PHP框架自带的DNSPOD库做DDNS动态域名解析

    取得FiradioPHP git clone https://github.com/firadio/firadiophp.git 保存到/config/dnspod1.php <?php ret ...

  3. UE4:四种加载资源的方式

    转自:https://blog.csdn.net/zhangxsv123/article/details/79707686 第一种: 如果该蓝图有C++类(或者说是从C++类创建的蓝图),直接进行加载 ...

  4. 安装ORACLE高可用RAC集群11g校验集群安装的可行性输出信息

    安装ORACLE高可用RAC集群11g校验集群安装的可行性输出信息 作者:Eric 微信:loveoracle11g [grid@node1 grid]$ ./runcluvfy.sh stage - ...

  5. Docker基本命令与使用 —— Docker容器的网络连接(四)

    一.Docker容器的网络基础 通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务. docker0是Linux虚拟 ...

  6. GraphicsMagick命令

    [ convert | identify | mogrify | composite | montage | compare | display | animate | import | conjur ...

  7. Reachability实时监控网络变化

    Reachability是一种实时观察网络发生变化控件,如当你的手机处于WiFi情况下,他就会检测环境,当处于GPS的情况下改变环境,当处于无网络的情况下又是一种环境.下面我们看下关于Reachabi ...

  8. 3.Jmeter参数化

    1.参数化的三种方式 ${变量} 1 用户定义的变量 2 添加配置元件 CSV Data Set Config ,导入.csv文档 3 利用函数助手中的函数获取参数值     主要用 _Random函 ...

  9. (4)网络配置及CRT远程连接

    修改linux虚拟机中某一网卡的网络配置: 打开终端,输入命令vi /etc/sysconfig/network-scripts/ifcfg-eth0 在文件中写入以下内容: (这里有个错误,DNS要 ...

  10. spring jdbc学习1

    1.queryForObject - 其中的 RowMapper 指定如何去映射结果集的行, 常用的实现类为 BeanPropertyRowMapper - 使用 SQL 中列的别名完成列名和类的属性 ...