#java #netty
#java #netty
Вопрос:
В настоящее время я работаю над POC с использованием Netty, и пока все идет очень хорошо, и мне удалось запустить и запустить довольно много функций.
Однако у меня есть вопрос о повторном использовании байтового буфера для записи. В следующем примере вы можете увидеть созданный вручную ответ bytebuffer, но он создается для каждого запроса, и это не требуется. Я хотел бы использовать ‘buf’. В настоящее время я немного работаю в режиме проб и ошибок, и я проверил примеры. Хотя мой случай выглядит очень стандартным, я не смог найти правильный способ создания объединенного буфера.
public class OperationHandler extends ChannelInboundHandlerAdapter {
private ByteBuf buf;
@Override
public void handlerAdded(ChannelHandlerContext ctx) {
buf = ctx.alloc().buffer(1024);
// System.out.println("Channel handler added");
}
@Override
public void handlerRemoved(ChannelHandlerContext ctx) {
buf.release();
buf = null;
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
try {
ByteBuffer response = ByteBuffer.allocate(1024);
byte[] operation = (byte[]) msg;
invoker.invoke(operation, response);
response.flip();
ctx.write(Unpooled.wrappedBuffer(response));
} finally {
ReferenceCountUtil.release(msg);
}
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx) {
ctx.flush();
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
// Close the connection when an exception is raised.
cause.printStackTrace();
ctx.close();
}
}
Комментарии:
1. Вы случайно не нашли решение? Я нахожусь в той же ситуации, и вместо того, чтобы использовать объединенные прямые буферы, я рассматриваю возможность просто использовать не объединенный прямой буфер и выделить его один раз.
2. Я отказался от Netty и использую NIO api напрямую. Все байтовые буферы перерабатываются.
3. Мне жаль, что вы не смогли использовать Netty. Однако Netty обеспечивает объединение буферов в своем ядре. Вы видели PooledByteBufAllocator ?