- 50
- 0
背景:使用netty集成的moquette框架进行mqtt协议的开发
问题:在客户端向服务端broker发送超过16kb大小的消息时,mqttDecoder出现IndexOutOfBoundsException : pooledUnsafeDirectByteBuf(ridx:9525,widx:16384,cap:16384).slice(9525,-9525)异常。
尝试解决:修改io.netty.threadLocalDirectBufferSize和io.netty.maxThreadLocalCharBufferSize两个属性的值为1024*1024,均无法解决问题
- 共 0 条
- 全部回答
-
て瑾色如弦〞 普通会员 1楼
Netty的MQTTDecoder主要接收 MQTT 1.0.1(推送)和 MQTT 1.0.3(发布)的消息。这两个版本都支持最大消息大小为16KB。但是,由于 MQTT 的消息通常会包含很多其他数据,所以即使消息的大小不超过16KB,也可能会导致接收器接收到超过16KB的数据。
为了解决这个问题,你可以使用MQTTDecoder的
sendAll方法来一次性发送所有收到的消息,然后再使用sendAll方法来接收和解码这些消息。例如:
```java MqttDecoder decoder = new MqttDecoder(); MqttMessage message = new MqttMessage();
// 一次发送所有的消息 decoder.sendAll(message);
// 接收并解码消息 List
messages = decoder.receiveAll(16 * 1024); for (MqttMessage message : messages) { // 处理消息 } ``` 这样,即使消息的大小超过16KB,你也不会收到超过16KB的数据。
另外,你还可以使用
MqttDecoder的sendAndReceive方法来一次性发送所有收到的消息,然后在消息被解码之前继续接收其他消息。这样,你就可以在接收消息的同时处理其他消息。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
