JavaDriver JavaDriver
首页
  • 基础
  • 并发
  • JVM
  • 设计模式
  • 计算机网络
  • 操作系统
  • 数据结构
  • 算法
  • MYSQL
  • REDIS
  • Netty
  • Kafka
系统设计
非技术
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

YoungAnn

西二旗Java老司机一枚 致力于社会主义添砖Java
首页
  • 基础
  • 并发
  • JVM
  • 设计模式
  • 计算机网络
  • 操作系统
  • 数据结构
  • 算法
  • MYSQL
  • REDIS
  • Netty
  • Kafka
系统设计
非技术
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Netty

    • Netty
    • TCP粘包拆包问题的解决之道
      • 4.1 TCP粘包/拆包
        • 4.1.1 TCP粘包/拆包问题说明
        • 4.1.2 TCP粘包/拆包发生的原因
        • 4.1.3 TCP粘包/拆包问题的解决策略
      • 4.3 Netty解决tcp粘包问题
    • Netty中有哪些解码器?
    • 为什么Netty要自己写一个ByteBuf
    • ChannelPipeline和ChannelHandler
    • EventLoop和EventLoopGroup
    • Java NIO了解吗?
  • Kafka

  • 中间件
  • Netty
YoungAnn
2022-05-21
目录

TCP粘包拆包问题的解决之道

# 4.1 TCP粘包/拆包

# 4.1.1 TCP粘包/拆包问题说明

TCP协议是”流“协议,流是没有间隔的。tcp会根据缓存大小将业务上的大包划分成多个小包发送出去、也可能多个小包合成一个大包发送出去。

# 4.1.2 TCP粘包/拆包发生的原因

  • 应用层:大于套接字接口缓冲区大小
  • TCP层:MSS
  • IP层:MTU

# 4.1.3 TCP粘包/拆包问题的解决策略

  • 消息定长len,例如每个报文固定200字节。那么读取到定长len后就重置计数器开始读取下一个包。
  • 包尾加换行符分割,如ftp。
  • 消息头+消息体。消息头包含消息长度信息。
  • 更复杂的应用协议,如netty.

# 4.3 Netty解决tcp粘包问题

  • LineBasedFrameDecoder:原理是遍历ByteBuf中字节,以换行符分割
  • StringDecoder:将接收的byte对象转换为字符串,然后调用后面的handler 如果发送的消息不是以换行符结束的,netty也有其他解码器支持。
编辑 (opens new window)
上次更新: 2022/05/22, 00:01:01
Netty
Netty中有哪些解码器?

← Netty Netty中有哪些解码器?→

最近更新
01
电商-商品系统设计
12-17
02
关于如何写OKR
12-09
03
对事不对人 vs 对人不对事
12-09
更多文章>
Theme by Vdoing | Copyright © 2022-2023 YoungAnnn | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式