美文网首页
Netty 使用Zero Copy传输文件

Netty 使用Zero Copy传输文件

作者: aaron1993 | 来源:发表于2017-12-03 18:49 被阅读0次

1. Zero Copy传输

一般情况下,将服务器上的文件传输到客户端时,文件在服务端会经历如下copy过程:调用read方法从硬盘读文件到内核空间,从内核空间读到用户内存空间,然后调用socket的write方法,这时用户内存空间的文件数据又会进入到内存空间,然后发送到网卡经过网络传输。这一过程文件数据多次在用户空间和内核空间copy。linux上使用sendfile可避免这种copy,文件数据读到内核空间后直接从内核空间到网卡。

Netty显然也是支持这种机制的,无需把文件读出来然后发送。使用方法如下。

2. netty zero copy传输文件

这里假设是client端发送文件到server端,client端handler如下:

public class FileHandler extends ChannelOutboundHandlerAdapter {
    @Override
    public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
        //假设msg是client端发送的文件名
        String fileName = (String)msg;
        // 创建FileRegion,netty FileRegion使用了FileChannel # transferTo实现Zero Copy
        FileRegion region = new DefaultFileRegion(new File(fileName),0,1000);
        ctx.writeAndFlush(region);
    }
}

相关文章

  • Netty 使用Zero Copy传输文件

    1. Zero Copy传输 一般情况下,将服务器上的文件传输到客户端时,文件在服务端会经历如下copy过程:调用...

  • Netty - 零拷贝

    本文主要在对于 Netty ByteBuf 的零拷贝(Zero Copy) 的理解的基础上做修补 根据 Wiki ...

  • Netty 之 FileRegion 文件传输

    概述 Netty 传输文件的时候没有使用 ByteBuf 进行向 Channel 中写入数据,而使用的 FileR...

  • Netty学习--传输

    传输迁移 未使用Netty 的阻塞网络编程 未使用Netty 的异步网络编程 使用Netty 的阻塞网络处理 使用...

  • netty的学习

    title: netty的学习tags: [netty] 最近写android的tcp通信,用来传输文件,用原生的...

  • putty提供的文件传输工具PSCP介绍

    用 SSH 来传输文件 PuTTY 提供了两个文件传输工具 PSCP (PuTTY Secure Copy cli...

  • Netty如何传输文件

    首先发送端将file包装成filereigon传输,其内部会循环的将文件发送到接收端而接收端接收到的都是byteb...

  • 5.dubbo源码-编码&解码

    Netty编码申明 由于dubbo底层使用Netty作为网络传输框架,所以如果需要编码的话,可以通过继承netty...

  • Netty系列(7) ByteBuf & zero-copy

    1.ByteBuf 1.1 概述 1.2 API详解 1.2.1 readerIndex 与 writerInde...

  • 浅析零拷贝(Zero-copy)

    [TOC]零拷贝(Zero-copy)是一种高效的数据传输机制,在追求低延迟的传输场景中十分常用。本文先通过传统方...

网友评论

      本文标题:Netty 使用Zero Copy传输文件

      本文链接:https://www.haomeiwen.com/subject/xdhzbxtx.html