1、为什么我们会选择netty而不是java原生api
    nio的java原生api使用起来比较繁琐ServerSocketChannel,SocktChannel,ByteBuffer,selector,必须精通多线程与网络编程的人才能写出高质量的Nio程序;
    netty是最流行的Nio框架,它的健壮性,功能、性能、可扩展性都是比较好的;

    2、序列化与反序列化
    序列化:把对象转换成字节的过程,称为对象序列化
    反序列化:把字节恢复成对象的过程,称为反序列化

    1.
    对象的持久化概念:把字节保存的硬盘上永久的存放
    2.
    网络传输对象概念:客户端将对象序列化为字节(序列化),变成二进制的形式发送到服务器端端,服务器端接受到字节对象后,反序列化成对象

    注意序列化的类必须要实现Serializable接口 transient修士变量不被序列化

    json
    MessagePack编码器
    marshalling实现编码器

    3、粘包与拆包
    什么是粘包:多次发送的消息,客户端一次合并读取 msg+msg
    什么是拆包:第一次完整消息+第二次部分消息组合 、第二次缺失的消息
    Tcp协议为了高性能的传输,发送和接受的时候都采用了缓冲区
    1.
    当我们的应用程序发送的数据大于套字节缓冲区的时候,就会实现拆包。
    2.
    当我们的应用程序写入的数据小于套字节缓冲区的时候,多次发送的消息会合并到一起接受,这个过程我们可以称做为粘包。
    3.
    接受端不够及时的获取缓冲区的数据,也会产生粘包的问题
    4.
    进行mss(最大报文长度)大小的TCP分段,当TCP报文长度-TCP头部长度>mss的时候将发生拆包。


    解决思路:
    1.以固定的长度发送数据,到缓冲区
    2.可以在数据之间设置一些边界(\n或者\r\n)
    利用编码器LineBaseDFrameDecoder解决tcp粘包的问题

    4、nettyApi与netty实现dobbo
    mayikt_netty_meite.zipmayikt_netty_nio_meite.zip

    meite_dubbo_rpc.zipload_balancer.zip

    手写RPC负载均衡器五种算法.docx