为什么Netty的Channel.write()写数据不能超过1024byte?如何设置能超过1024byte?:报错
最近在使用Netty做一个项目,Netty只能传输byte类型的数据,但是Channel每次写数据不会超过1024byte,如果超过1024byte,接收端需要接收多次才能接收完所有数据,请问怎样才能一次完成接收大于1024byte的数据呢?有什么参数能设置吗?
你意思是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的拆包粘包问题
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。