Я построил следующий простой сервер и тестирую его с использованием ab
.
Если я запускаю ab
, делая 3000 запросов (300 одновременно), это работает. Если я запускаю его снова, он показывает мне:
apr_socket_connect(): Connection reset by peer (54)
И если после этой ошибки я пытаюсь сделать один запрос с помощью curl без перезапуска сервера, он работает. Если я запускаю снова ab
, это показывает ту же ошибку.
Кажется, что он не может обрабатывать слишком много одновременных соединений. Ниже код:
public static void main(String[] args) throws Exception {
ServerBootstrap bootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
@Override
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(new StringEncoder(), new MyServerHandler());
}
});
bootstrap.bind(new InetSocketAddress(9090));
System.out.println("Running");
}
Вот обработчик:
public class MyServerHandler extends SimpleChannelUpstreamHandler {
private static AtomicLong request = new AtomicLong();
@Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)
throws Exception {
ChannelFuture channelFuture = e.getChannel().write("This is request #" + request.incrementAndGet() + "\n");
channelFuture.addListener(ChannelFutureListener.CLOSE);
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
throws Exception {
System.out.println(e.getCause());
e.getChannel().close();
}
}
Как вы видите, это очень просто, просто показывает общее количество обработанных запросов.
Любые советы?
Спасибо