Netty DefaultRegion和FileChannelden

本周团队周会大家进行比赛demo的演示,各自都采用了非常好的方式来进行文件传输,比如xx 采用的rsocket实现,xxx 采用的chunked实现都耳目一新,整体而言大家底层都采用的Netty。个人采用的是Netty+Akka来实现,通过充分利用DefaultRegion和FileChannel的zerocopy + 分片传输的能力,最后跑分不错。其中需要分享的一个坑是:

进行分片传输是,在接收侧的文件需要提前设置一个最终的文件大小,通过RandomAccessFile.setLength实现,否则直接seek可能不能得到预期的结果。
进行分片传输时,如果使用的是DefaultFileRegion,则需要手动覆盖他的deallocate 方法,直接返回,不然在别的分片完成时,将会对底层的文件FIleChannel进行释放,造成其他相关分片失败。
在接收端FileChannel的write可以通过自己控制position来进行并发写入,但是如果position自己不记录和更新,则可能一直在同一个位置写数据,因为FileChannel的好几个write方法都不会改变文件当前写入的position,需要自己记录。
虽然是个小demo,但还是非常有意思。大家也都积极参与看到了同一个问题大家
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值