daoshenzzg / socket-mqtt

基于Netty+MQTT的高性能推送服务框架。支持普通Socket、MQTT、MQTT web socket协议。非常方便接入上层业务实现推送业务。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

解决io.netty.util.IllegalReferenceCountException: refCnt: 0问题。

SuperWuYou opened this issue · comments

因为netty4之后BytBuf加入了计数器概念
我们在创建Server的时候开启了异步执行,如下图:
image

这个时候呢,在代码执行到ServerDispatchHandler.channelRead()这个方法时,里面有这么一句代码 eventDispatcher.dispatchMessageEvent(ctx, channel, msg);
image
这句代码的实现是这样的:
image
因为是异步的情况,在我们还没有读取ByteBuf数据时就已经先执行了如下图这句代码:
image
这时候ByteBuf已经被释放了,所以我们抛出了io.netty.util.IllegalReferenceCountException: refCnt: 0异常。
解决方法:
1. 改为同步执行
image
2. 修改作者代码
image

问题确实存在,按照你的方式解决啦。