2019独角兽企业重金招聘Python工程师标准>>>

最近接到一项新的任务,其中涉及到用netty解决粘包问题,该问题解决得很顺利。下面是一些心得体会。

我们知道,netty当中有boss线程和worker线程,通常是1对多的关系,可以理解为boss接到客户的请求之后,分配给其中一个worker去处理,如果客户过多,可能会出现一个worker服务多个客户的情况。这是背景。

按照我的理解,粘包问题解决的关键在于2点,1、接收到数据在无法得到及时解析的情况下,得有地方给它存下来;2、缓冲区指针的任意移动;恰好,这两点netty都能够很轻易的。下面是代码,因为公司的保密需求,将会隐去具体业务部分。

public class ProtocolAnaDecoder extends ByteToMessageDecoder {

@Override

protected void decode(ChannelHandlerContext ctx, ByteBuf in, Listout) throws Exception {         Object decoded = null;

while(true){

decoded = decode(ctx, in);

if (decoded != null) {

out.add(decoded);

} else{

return;

}

}

}

private Object decode(ChannelHandlerContext ctx, ByteBuf in) {

//标记当前读指针位置

in.markReaderIndex();

while(in.isReadable()){

byte b = in.readByte();

//业务处理部分,如果获得一个正确的消息对象,直接返回

}

//如果没有得到任何消息对象,重置读指针位置(之前mark的位置)。         in.resetReaderIndex();

return null;

}

}

转载于:https://my.oschina.net/dongtianxi/blog/703281

Netty之粘包问题解决相关推荐

  1. 三、Netty的粘包半包问题解决

    一.定义 TCP 传输中,客户端发送数据,实际是把数据写入到了 TCP 的缓存中,粘包和半包也就会在此时产生.客户端给服务端发送了两条消息ABC和DEF,服务端这边的接收会有多少种情况呢?有可能是一次 ...

  2. 【Netty】Netty解决粘包和拆包问题的四种方案

    在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接.由于微服务往对方发送信息的时候,所有的请求都是使 ...

  3. Netty 解决粘包和拆包问题的四种方案

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | https://my.oschina.net/ ...

  4. Netty详解(五):Netty TCP粘包 拆包

    1. 概述 无论是服务端还是客户端,我们读取或者发送消息的时候,都需要考虑TCP底层的粘包和拆包机制.下面我们来通过Netty来详解TCP底层的粘包和拆包机制. 2. TCP底层的粘包和拆包机制 TC ...

  5. Netty解决粘包和拆包问题的四种方案

    在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接.由于微服务往对方发送信息的时候,所有的请求都是使 ...

  6. Netty之粘包分包

    粘包现象 客户端在一个for循环内连续发送1000个hello给Netty服务器端, 1 Socket socket = new Socket("127.0.0.1", 10101 ...

  7. 2.Netty的粘包、拆包(一)

    Netty粘包.拆包 1.什么是拆包.粘包 (1)拆包.粘包介绍 TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想想河里的流水,是连成一片的,其间并没有分界线.TC ...

  8. 【NIO与Netty】网络编程:netty中粘包、半包现象展示,分析及解决

    一.粘包现象 服务端 public static void main(String[] args) {NioEventLoopGroup bossGroup=new NioEventLoopGroup ...

  9. 针对网上的一份netty的面试题之(netty的粘包和拆包)

    什么是粘包与半包问题? 解决粘包半包问题 由于底层的TCP无法理解上层的业务数据,所以在底层是无法保证数据包不被拆分和重组的,这个问题只能通过上层的应用协议栈设计来解决,根据业界的主流协议的解决方案, ...

最新文章

  1. iSCSI原理和实现
  2. electron 打包 php,electron 将现有vue项目改成支持electron桌面端应用
  3. tensorflow中学习率、过拟合、滑动平均的学习
  4. 【Bash】实现指定目录下的文件编码转换,以原文件名保存
  5. matlab7.0编辑运行,手把手解答win10系统运行matlab7.0时提示Runtime error的操作方案
  6. 操作无法完成因为已经在mysqld.exe上打开_金蝶KIS软件操作技巧/百问百答(下)...
  7. 精美的导航引导页html源码
  8. Vue之webpack之vue
  9. Spss典型相关分析的常见问题
  10. matlab人脸识别代码,基于matlab的人脸识别源代码.doc
  11. python实例008--摄氏温度和华氏温度转换
  12. 【ELIXIR】简单说下elixir的历史
  13. ex10_8金融应用:货币单位
  14. Bypass disable_function
  15. Java实现 LeetCode 134 加油站
  16. 18. --plic--=--ply--=--pli--=--ple--=--plex--=--plo-- to fold 倍,重,折叠 (词19、20)
  17. 旅行商问题 Traveling Salesman Problem(TSP)
  18. 麦克风里有电流声,杂音怎么办
  19. FastASR离线语音识别库
  20. 一次'诡异'的执行SQL报错ORA-03113的问题处理

热门文章

  1. CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
  2. 记录安装oracle的那些事(二)之双系统安装
  3. MaxCompute - ODPS重装上阵 第二弹 - 新的基本数据类型与内建函数
  4. GoldenGate复制单表开并行
  5. 机器学习算法一览,应用建议与解决思路
  6. Provisioning Services 7.8 入门系列教程之十四 UEFI支持和BOOTPTAB 编辑器
  7. 归纳工作中用到的Linux 命令
  8. Unity3D教程:自定义mesh做指向信息面板效果
  9. Ubuntu12.10 安装Nessus
  10. Linux Shell中的延时函数