之前开过品味性能系列、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. Delphi 7升级到XE2的字符串问题

    原来的Delphi中有两种字符串:AnsiString和WideString.默认的string即AnsiString.而在Delphi 2009中,新增加了一种UnicodeString.为什么不沿 ...

  2. 文件管理 - Ring3创建目录

    //多字符集 #include "stdafx.h" #include <Windows.h> #include <iostream> using name ...

  3. centos7.6+samba+设置可读可写不可删权限

    samba原文 https://www.cnblogs.com/muscleape/p/6385583.html 设置可读可写不可删权限原文: https://blog.51cto.com/guanh ...

  4. sql server 数据库变成单用户模式的恢复

    USE master;GODECLARE @SQL VARCHAR(MAX);SET @SQL=''SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID)FROM master. ...

  5. wordpress 解决文章内http链接问题

    1. 登录Wordpress后台, 常规设置  > 里面把站点URL 修改成 https开头 2. 登录phpmyadmin , 执行替换链接的SQL 替换wordpress配置的链接地址 (可 ...

  6. vim相关

    保存和传递宏 1 先建立一个宏.如上 2 在任意一个文件的空白位置normal状态下,命令"ap 即可以把宏的内容显示出来.比如说我的宏是: "ohello th id<80 ...

  7. Maven下CXF的wsdl2java生成客户端代码

    <plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin< ...

  8. 在VMware中为Redhat HAT配置本地yum源

    在VMware中为Redhat HAT配置本地yum源 今天准备使用CM安装大数据环境,到需要几台机器都使用同一套yum源才可以,所以想到将Redhat镜像文件拷贝到虚拟机中,在挂起使用,最后通过ht ...

  9. Javascript中 toFixed

    javascript中toFixed使用的是银行家舍入规则. 银行家舍入:所谓银行家舍入法,其实质是一种四舍六入五取偶(又称四舍六入五留双)法. 简单来说就是:四舍六入五考虑,五后非零就进一,五后为零 ...

  10. java 多线程学习

    一.概念 程序.进程.线程 程序   是计算机指令的集合. 进程   是一个运行中的程序,它指的是从代码加载,执行到执行结束这样一个完整过程.每个进程占用不同的内存空间. 线程   是进程中某个单一顺 ...