@Override public void write(final ChannelHandlerContext ctx, final Object msg, ChannelPromise promise) throws Exception { // we are either a channel buffer, which gets delayed until a response is available, or we are the actual response if (msg instanceof ByteBuf) { executor.execute(new ResponseRunner((ByteBuf) msg, promise)); } else { ctx.write(msg, promise); } }
if (!bogusResponse) piggyBackResponses(responseHolder.response.content()); responseHolder.response.headers().set(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(responseHolder.response.content().readableBytes()));
public void run() { ResponseHolder responseHolder = null; do { try { responseHolder = responses.take(); } catch (InterruptedException e) { // ignore, we'll just try again } } while (responseHolder == null); if (!bogusResponse) { ChannelBuffer piggyBackBuffer = piggyBackResponses(); responseHolder.response.setContent(piggyBackBuffer); responseHolder.response.addHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(piggyBackBuffer.writerIndex())); channel.write(responseHolder.response); } else { responseHolder.response.setContent(buffer); responseHolder.response.addHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(buffer.writerIndex())); channel.write(responseHolder.response); } }
public void keepAlive(final long time) { // send some responses to catch up thus avoiding any timeout. int lateResponses = 0; for (ResponseHolder response : responses) { if (response.timeReceived < time) { lateResponses++; } else { break; } } for (int i = 0; i < lateResponses; i++) { executor.execute(new ResponseRunner()); } }
public void keepAlive(final long time) { // send some responses to catch up thus avoiding any timeout. int lateResponses = 0; for (ResponseHolder response : responses) { if (response.timeReceived < time) { lateResponses++; } else { break; } } for (int i = 0; i < lateResponses; i++) { executor.execute(new ResponseRunner()); } }
@Override public void writeRequested(final ChannelHandlerContext ctx, final MessageEvent e) throws Exception { // we are either a channel buffer, which gets delayed until a response is available, or we are the actual response if (e.getMessage() instanceof ChannelBuffer) { ChannelBuffer buf = (ChannelBuffer)e.getMessage(); executor.execute(new ResponseRunner(buf)); } else { Channels.write(ctx, e.getFuture(), e.getMessage(), e.getRemoteAddress()); } }