Netty中的同步文件传输

时间:2018-09-04 23:50:49

标签: java netty

我需要同步一个接一个地发送多个文件,但是当我通过通道发送文件然后调用ChannelFuture的await()方法时,它将引发异常:

java.lang.IllegalStateException: await*() in I/O thread causes a dead lock or sudden performance drop. Use addListener() instead or call await*() from a different thread.

这是代码:

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.DefaultFileRegion;
import org.jboss.netty.channel.FileRegion;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
public class FileHandler  extends SimpleChannelUpstreamHandler{
@Override
public void messageReceived(ChannelHandlerContext ctx, 
MessageEvent e) {
    FileInputStream in;
    try {
        in = new FileInputStream("C:\\Users\\che.jpg");
        FileRegion region = new 
   DefaultFileRegion(in.getChannel(),0,762511);
        for(int i=0;i<11;i++) {

        ChannelFuture chf = ctx.getChannel().write(region);
        try {
            chf.await();
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        }
    } catch (FileNotFoundException  e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}
}

我该如何构建更便利的工具,该工具将使用零拷贝同步发送多个文件?

0 个答案:

没有答案