Netty学习记录-入门篇( 七 )

Nagle算法) , 将多次间隔较小且数据量小的数据 , 合并成一个大的数据块 , 然后进行封包 。这样做虽然提高了效率 , 但是接收端就难于分辨出完整的数据包了 ,  因为面向流的通信是无消息保护边界的 。

Netty学习记录-入门篇

文章插图
TCP粘包与拆包解决方案
  • 使用 自定义协议 + 编解码器 来解决
  • 关键就是要解决 服务器端每次读取数据长度的问题 , 这个问题解决 , 就不会出现服务器多读或少读数据的问题 , 从而避免TCP粘包、拆包 。
代码示例:
  • 要求客户端发送5个Message对象 , 客户端每次发送一个Message对象
  • 服务器端每次接收一个Message , 分5次进行解码 , 每读取到一个Message , 会回复一个Message对象给客户端
Netty 核心源码剖析只有看过Netty源码 , 才能说是真的掌握了Netty框架 。
判断是否为 2 的 n 次方
private static boolean isPowerOfTwo(int val) {return (val & -val) == val;}源码解析:
  • Netty启动过程源码剖析
  • Netty接受请求过程源码剖析
  • Pipeline Handler HandlerContext创建源码剖析
  • ChannelPipeline是如何调度handler的
  • Netty心跳(heartbeat)服务源码剖析
  • Netty核心组件EventLoop源码剖析
  • handler中加入线程池和Context中添加线程池的源码剖析
用Netty 自己 实现 dubbo RPC
  • RPC(Remote Procedure call) - 远程程序调用 , 是一个计算机通信协议 。该协议允许运行与一台计算机的程序调用另一台计算机的子程序 , 而程序员无需额外地为这个交互作用编程 。
  • 两个或多个应用程序都分布在不同的服务器上 , 它们之间的调用都像是本地方法调用一样 。
  • 常见的PRC框架有:阿里的Dubbo、Google的gRPC、Go语言的rpcx,spring的Spring cloud 。
    Netty学习记录-入门篇

    文章插图
  • RPC的目标就是将 2-8 这些步骤都封装起来 , 用户无需关心这些细节 , 可以像调用本地方法一样即可完成远程服务调用 。
自己实现 Dubbo RPC(基于Netty)需求说明:
  • Dubbo底层使用了Netty作为网络通信框架 , 要求用Netty实现一个简单的RPC框架
  • 模仿Dubbo,消费者和提供者约定接口和协议 , 消费者远程调用提供者的服务 , 提供者返回一个字符串 , 消费者打印提供者返回的数据
设计说明:
  • 创建一个接口 , 定义抽象方法 , 用于消费者和提供者之间的约定 。
  • 创建一个提供者 , 该类需要监听消费者请求 , 并按照约定返回数据 。
  • 创建一个消费者 , 该类需要透明的调用自己不存在的方法 , 内部需要使用Netty请求提供者返回数据 。

经验总结扩展阅读