开发者社区> 问答> 正文

如何设置能超过1024byte?:报错

为什么Netty的Channel.write()写数据不能超过1024byte?如何设置能超过1024byte?:报错

最近在使用Netty做一个项目,Netty只能传输byte类型的数据,但是Channel每次写数据不会超过1024byte,如果超过1024byte,接收端需要接收多次才能接收完所有数据,请问怎样才能一次完成接收大于1024byte的数据呢?有什么参数能设置吗?

展开
收起
kun坤 2020-06-09 13:48:49 1182 0
1 条回答
写回答
取消 提交回答
  • 你意思是netty接收还是发送出去的限制??????######其实我也没弄清楚是接收限制还是发送限制。。我写的那一段ChannelBuffer的大小可以超过1024byte,但一旦超过1024byte,接收端就得分多次接收,也就是messageRecieved()方法得执行多次。。######我虽没用过netty,但我觉得应该和服务器端或客户端的byte缓存数组的设置有关系,若缓存数组的大小事1024的话,那当缓存满的时候就小先清空缓存,然后才能接着传输活接收。######应该都有,遵循木桶原理,哪个小就按照哪个来,我只是猜测一个可能性,具体的我不懂。######读的限制可以设置的,,你可以看看NioWorker这个类里312行 channel.getConfig().getReceiveBufferSizePredictor();他通过这个参数得到大小,再通过计算得到buffer大小######看下你两端电脑的MTU是多少######回复 @陌上草 : tcp传输基本原理,系统底层有一个缓冲区,这个缓冲区是各家系统根据tcp/ip协议自己实现的,大小不同,且你无法直接控制大小,一般情况下,这个缓冲区会在被填满时,且网络闲置时发送。这个大小从512KB到4MB不等,当你发送数据超过这个缓冲区大小的时候,就只能被该缓冲区拆成一段段的发,也因此你的接收端会一段段的收到数据,这就是tcp传输中粘包、断包问题的由来######回复 @陌上草 : mtu是最大传输单元 socket不是用来传输数据的麽######我用的是socket通信,怎么会和MTU有关系呢?######我感觉你可能问的是这个LengthFieldBasedFrameDecoder, http://netty.io/3.9/api/index.html,可以在API里看一下介绍######tcp的拆包粘包问题

    2020-06-09 13:48:55
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载