6
回答
为什么Netty的Channel.write()写数据不能超过1024byte?如何设置能超过1024byte?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
最近在使用Netty做一个项目,Netty只能传输byte类型的数据,但是Channel每次写数据不会超过1024byte,如果超过1024byte,接收端需要接收多次才能接收完所有数据,请问怎样才能一次完成接收大于1024byte的数据呢?有什么参数能设置吗?
举报
陌上草
发帖于6年前 6回/5K+阅

以下是问题补充:

  • @陌上草 :其实我也没弄清楚是接收限制还是发送限制。。我写的那一段ChannelBuffer的大小可以超过1024byte,但一旦超过1024byte,接收端就得分多次接收,也就是messageRecieved()方法得执行多次。。 (6年前)
共有6个答案 最后回答: 3年前
你意思是netty接收还是发送出去的限制??????
--- 共有 1 条评论 ---
陌上草其实我也没弄清楚是接收限制还是发送限制。。我写的那一段ChannelBuffer的大小可以超过1024byte,但一旦超过1024byte,接收端就得分多次接收,也就是messageRecieved()方法得执行多次。。 6年前 回复
我虽没用过netty,但我觉得应该和服务器端或客户端的byte缓存数组的设置有关系,若缓存数组的大小事1024的话,那当缓存满的时候就小先清空缓存,然后才能接着传输活接收。

读的限制可以设置的,,你可以看看NioWorker这个类里312行

channel.getConfig().getReceiveBufferSizePredictor();他通过这个参数得到大小,再通过计算得到buffer大小

看下你两端电脑的MTU是多少
--- 共有 3 条评论 ---
abcbuzhiming回复 @陌上草 : tcp传输基本原理,系统底层有一个缓冲区,这个缓冲区是各家系统根据tcp/ip协议自己实现的,大小不同,且你无法直接控制大小,一般情况下,这个缓冲区会在被填满时,且网络闲置时发送。这个大小从512KB到4MB不等,当你发送数据超过这个缓冲区大小的时候,就只能被该缓冲区拆成一段段的发,也因此你的接收端会一段段的收到数据,这就是tcp传输中粘包、断包问题的由来 4年前 回复
huzorro回复 @陌上草 : mtu是最大传输单元 socket不是用来传输数据的麽 6年前 回复
陌上草我用的是socket通信,怎么会和MTU有关系呢? 6年前 回复
顶部