синхронизированная передача файлов в Netty - PullRequest
0 голосов
/ 05 сентября 2018

Мне нужно отправить несколько файлов по одному синхронно, но когда я отправляю файл с каналом, а затем вызываю метод await () ChannelFuture, он выдает исключение:

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();
    }
}
}

Как я могу построить обработчик, который будет синхронно отправлять несколько файлов с использованием нулевой копии?

...