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

文章插图
TCP粘包与拆包解决方案
- 使用 自定义协议 + 编解码器 来解决
- 关键就是要解决 服务器端每次读取数据长度的问题 , 这个问题解决 , 就不会出现服务器多读或少读数据的问题 , 从而避免TCP粘包、拆包 。
- 要求客户端发送5个Message对象 , 客户端每次发送一个Message对象
- 服务器端每次接收一个Message , 分5次进行解码 , 每读取到一个Message , 会回复一个Message对象给客户端
判断是否为 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中添加线程池的源码剖析
RPC
(Remote Procedure call) - 远程程序调用 , 是一个计算机通信协议 。该协议允许运行与一台计算机的程序调用另一台计算机的子程序 , 而程序员无需额外地为这个交互作用编程 。
- 两个或多个应用程序都分布在不同的服务器上 , 它们之间的调用都像是本地方法调用一样 。
- 常见的PRC框架有:阿里的
Dubbo
、Google的gRPC
、Go语言的rpcx
,spring的Spring cloud 。
文章插图
RPC
的目标就是将 2-8 这些步骤都封装起来 , 用户无需关心这些细节 , 可以像调用本地方法一样即可完成远程服务调用 。
Dubbo
底层使用了Netty作为网络通信框架 , 要求用Netty实现一个简单的RPC
框架
- 模仿
Dubbo
,消费者和提供者约定接口和协议 , 消费者远程调用提供者的服务 , 提供者返回一个字符串 , 消费者打印提供者返回的数据
- 创建一个接口 , 定义抽象方法 , 用于消费者和提供者之间的约定 。
- 创建一个提供者 , 该类需要监听消费者请求 , 并按照约定返回数据 。
- 创建一个消费者 , 该类需要透明的调用自己不存在的方法 , 内部需要使用Netty请求提供者返回数据 。
经验总结扩展阅读
- 高三物理学习方法技巧是什么 有哪些窍门
- 给朋友的腊八节祝福语
- 腊八节经典祝福文案15篇
- 腊八节祝福语集合
- 腊八节最暖心祝福语2023
- 国庆节姐姐祝福语2023
- 国庆节祝福姐姐的祝福语
- 银行国庆节短信祝福
- 2023国庆节祝福语
- 2023祝朋友七夕快乐的祝福语