解决方案一:LineBasedFrameDecoder+StringDecoder来解决TCP的粘包/拆包问题

只需要在客户端和服务端加上45、46两行代码并且在发送消息的时候加上换行符即可解决TCP粘包/拆包问题

LineBasedFrameDecoder的工作原理就是它依次遍历ByteBuf中的可读字节,判断是否有\n或\r\n,如果有,就以此为结束位置,从可读索引到结束位置区间的字节组成一行。它是以换行符为结束标志的解码器,支持携带结束符或者不携带结束符两种解码方式,同时支持配置单行的最大长度。如果连续读取到最大长度后仍然没有发现换行符,就会抛出异常,同时忽略掉之前读到的异常码流。

StringDecoder就是将接收到的对象转换成字符串,然后继续调用后面的Handler。

解决方案二:DelimiterBasedFrameDecoder+StringDecoder来解决TCP的粘包/拆包问题

解决方案三:FixedLengthFrameDecoder+StringDecoder来解决TCP的粘包/拆包问题

利用FixedLengthFrameDecoder解码器,无论一次接收到多少数据报,它都会按照构造函数中设置的固定长度进行解码,如果是半包消息,FixLengthFrameDecoder会缓存半包消息并等待下个包到达后进行拼包,直到读取到一个完整的包。

注意:HTTP请求消息可以一次性接收完成,此时ChannelHandler的channelReadComplete方法会被调用一次,但当一个整包消息经过多次读取才能完成解码时,channelReadComplete方法就会被调用多次。channelRead是只有在消息被解码成功后才会调用channelRead方法

netty解决TCP粘包/拆包导致的半包读写问题的三种方案相关推荐

  1. Netty解决TCP粘包/拆包导致的半包读写问题

    一.TCP粘包/拆包问题说明 TCP是个"流"协议,就是没有界限的一串数据.TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包拆分,所以在业务上认为,一 ...

  2. Netty学习总结(5)——Netty之TCP粘包/拆包问题的解决之道

    无论是服务端还是客户端,读取或者发送消息的时候,都需要考虑TCP底层的粘包/拆包机制. TCP粘包/拆包 TCP是个"流"协议. 流:没有界限的一串数据.如同河里的流水,它们是连成 ...

  3. 【Netty】TCP粘包和拆包

    一.前言 前面已经基本上讲解完了Netty的主要内容,现在来学习Netty中的一些可能存在的问题,如TCP粘包和拆包. 二.粘包和拆包 对于TCP协议而言,当底层发送消息和接受消息时,都需要考虑TCP ...

  4. Netty解决TCP的粘包和分包(二)

    2019独角兽企业重金招聘Python工程师标准>>> Netty解决TCP的粘包和分包(二) 使用LengthFieldBasedFrameDecoder解码器分包 先看一下这个类 ...

  5. golang解决TCP粘包问题

    6行代码解决golang TCP粘包 转自:https://studygolang.com/articles/12483 什么是TCP粘包问题以及为什么会产生TCP粘包,本文不加讨论.本文使用gola ...

  6. c#解决TCP“粘包”问题

    c#解决TCP"粘包"问题 参考文章: (1)c#解决TCP"粘包"问题 (2)https://www.cnblogs.com/wangjun8868/p/71 ...

  7. Linux socket编程(一):客户端服务端通信、解决TCP粘包

    一.服务端程序 服务端程序工作流程: 创建socket →\rightarrow→ 绑定监听的IP地址和端口 →\rightarrow→ 监听客户端连接 →\rightarrow→ 接受/发送数据.对 ...

  8. 分布式锁解决并发三种方案

    目录 为什么使用分布式锁? 分布式锁应具备的条件 三种实现方式 1.数据库锁 1.1 乐观锁 2.基于redis的分布式锁 3.基于Zookeeper实现分布式锁 4.三种方案的比较 分布式CAP理论 ...

  9. 解决秒杀系统超卖问题的三种方案

    在秒杀系统设计中,超卖是一个经典.常见的问题,任何商品都会有数量上限,如何避免成功下订单买到商品的人数不超过商品数量的上限,这是每个抢购活动都要面临的难点. 一.问题描述 在多个用户同时发起对同一个商 ...

最新文章

  1. 【光纤通信】关于RFA(喇曼光纤放大器)
  2. 微信 php post json,微信企业号:如何POST JSON数据发送消息给企业号成员
  3. P1801 黑匣子_NOI导刊2010提高(06)
  4. 51CTO-风哥-ORACLE学习计划(持续更新中)
  5. 不同国别的买家,谈判方式竟有如此大差异!
  6. 使用Jedit建立IDE图文教程
  7. Leecode240. 搜索二维矩阵 II——Leecode每日一题系列
  8. 计算机1级 计算机基础知识,计算机一级计算机基础及MSOffice应用:计算机基础知识...
  9. 云原生时代,.NET5必将称王!
  10. [CodeForces gym 102956 D] Bank Security Unification(位运算优化dp)
  11. 一款JS+CSS实现的无缝平滑图片滚动代码
  12. jquery监听textarea内容变化
  13. 信号与系统之系统的时域分析
  14. sort降序shell_shell脚本学习指南之文本排序与排重等
  15. html如何插入一张图片,html如何插入图片
  16. 远距离WiFi无线传输方案,CV5200模组通信应用,无线自组网技术
  17. 刚开始做斗音掌握这5点至少让你少走半年弯路
  18. 转:我在淘宝这7年(四)
  19. python实现AI换脸
  20. c语言编程*三角形图形右看齐,EOJ 3213 向右看齐

热门文章

  1. 程序员必看的那些电影
  2. 【程序人生】那些争议最大的编程观点
  3. 滨果儿专属 --第一篇:51单片机最小工作系统组成
  4. JAVA设计模式--组合模式
  5. 微软在盈利前确认裁员
  6. 哈佛商学院20部必看电影
  7. 《安富莱嵌入式周报》第227期:2021.08.23--2021.08.29
  8. Linux服务器12小时制转24小时制
  9. CS、BS架构定义(笔记)
  10. 解决win10系统无法通过usb共享手机网络