Greetings All,
I wanted to know how can I manage a group of channels outside of a
server's channel handler? I am implementing a file server and I want the
server to be able to transfer files through parallel data channels once it
receives a file request from a client. For example, if I have a single 4GB
file and 4 data channels/connections, I want the server to transfer 1GB
through each of the data channels simultaneously (note files are divided
evenly among all data channels). In essence, the server receives and
processes the file request through one of the channel's channelHandler -
channelRead method, but then how can I inform and have each channel send
their part/portion of the file?
For example, if I have a simple FileServerHandler class as below for each
of the 4 channels, and I wanted to know how can I inform and have each
channel send their part/portion of the file.
public class FileServerHandler extends SimpleChannelInboundHandler<ByteBuf>
{
private Logger logger; private String currentFileName;
private String currentDirectory;
private long currentFileOffset;
private long currentFileChunkSize;
private boolean isDirectory;
public FileServerHandler() {
logger = Logger.getLogger(this.getClass().getName());
}
public void channelActive(ChannelHandlerContext ctx) throws Exception{
logger.info("Server:channel is active ");
}
@Override
public void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws
Exception {
logger.info("Server:channelRead0: filePath = " + msg);
processFileRequest(msg); //Obtains the file or directory to retrieve and
the size of the file or
//files within a directory to retrieve recursively
/*
*At this point I wish to tell the other channels the file or directory to
retrieve, the file size, and the portion of the file(s) it should send? How
can I do this? Also, if I implemented a channelManager, How can I pass this
information to the channelManager and have it write the data to each
channel?*
*/
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
if (ctx.channel().isActive()) {
ctx.writeAndFlush("ERR: " +
cause.getClass().getSimpleName() + ": " +
cause.getMessage() + '\n').addListener(ChannelFutureListener.CLOSE);
}
}
}
--
You received this message because you are subscribed to the Google Groups
"Netty discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/netty/d499d1de-f373-43c4-a493-69f86de57a9c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.