java 块传输_netty案例,netty4.1中级拓展篇十一《Netty基于ChunkedStream数据流切块传输》...

0612c4a011ca5b1eb71b5c34bc4a507a.png

作者:付政委 | 技术沉淀,多则灿烂!

前言介绍

在Netty这种异步NIO框架的结构下,服务端与客户端通信过程中,高效、频繁、大量的写入大块数据时,因网络传输饱和的可能性就会造成数据处理拥堵、GC频繁、用户掉线的可能性。那么由于写操作是非阻塞的,所以即使没有写出所有的数据,写操作也会在完成时返回并通知ChannelFuture。当这种情况发生时,如果仍然不停地写入,就有内存耗尽的风险。所以在写大块数据时,需要对大块数据进行切割发送处理。

https://netty.io/4.0/api/io/netty/handler/stream/ChunkedStream.htmlChunkedInput 的实现ChunkedFile 从文件中逐块获取数据,当你的平台不支持零拷贝或者你需要转换数据时使用ChunkedNioFile 和ChunkedFile 类似,只是它使用了FileChannelChunkedStream 从InputStream 中逐块传输内容ChunkedNioStream 从ReadableByteChannel 中逐块传输内容

开发环境

1、jdk1.8【jdk1.7以下只能部分支持netty】2、Netty4.1.36.Final【netty3.x 4.x 5每次的变化较大,接口类名也随着变化】3、NetAssist 网络调试助手[获取:关注公众号:bugstack虫洞栈 | 回复;NetAssist+邮箱]

代码示例

重点代码块讲解,完整代码,关注公众号:bugstack虫洞栈| 回复Netty源码,获取

MyChannelInitializer.java | 添加流量分块功能

MyServerChunkHandler.java | 流量分块实现ChunkedStream(in, 10)

测试结果

启动服务端NettyServer

启动NetAssist网络调试助手 | 发送测试消息[结尾加换行]

27f79f2ed0c4b16b3405a60539a4e3f2.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值