Я пишу tcp-прокси, используя netty 4.1.x. Прокси-сервер должен поддерживать несколько тысяч активных сессий TCP одновременно. Иногда (когда прокси перезапускается) все клиенты будут пытаться повторно подключиться, и тогда их сеансы с целями должны оставаться активными в течение нескольких дней. В моем исходящем обработчике channelActive(..)
метод I bootstrap и подключение к целевому прокси (на основе прокси-сервера Netty ):
@Override
public void channelActive(ChannelHandlerContext ctx) {
inboundChannel = ctx.channel();
String remoteHost = lb.getHost();
int remotePort = lb.getPort();
Bootstrap b = new Bootstrap();
b.group(inboundChannel.eventLoop())
.channel(ctx.channel().getClass())
.handler(new SslOutboundProxyInitializer(remoteHost, remotePort, inboundChannel))
.option(ChannelOption.AUTO_READ, false);
ChannelFuture f = b.connect(remoteHost, remotePort);
...
}
Где: SslOutboundProxyInitializer
передает обработчик ssl, обработчик журнала и обработчик SslOutboundHandler
. SslOutboundHandler
- это объект ChannelInboundHandlerAdapter
, который просто считывает данные из входящего канала и записывает их в исходящий канал.
Вопросы:
- Правильный ли подход к созданию новый
SslOutboundProxyInitializer
, который сам по себе создает новый обработчик ssl, новый обработчик ведения журнала и новый SslOutboundHandler
для каждого такого проксированного сеанса? - Когда эти объекты будут освобождены? Я не видел, чтобы они освобождались после завершения сеанса. Стоит ли чистить их явно?
Спасибо