Я провожу эталонное тестирование для Jetty и VertX.3 для поддержки асинхронного режима. ниже мой пример кода VertX.
public class VertXSampleServer extends AbstractVerticle{
@Override
public void start(){
HttpServer server=vertx.createHttpServer();
server.requestHandler(new Handler<HttpServerRequest>() {
@Override
public void handle(HttpServerRequest request) {
HttpServerResponse response=request.response();
response.setStatusCode(HttpStatus.SC_OK);
System.out.println("re received");
response.putHeader("Content-Length", Integer.toString(5));
response.write("Hello");
}
}).listen(9091);
}
}
Пример сервера Jetty:
public class JettySampleAsyncServer
{
public static class EmbeddedAsyncServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
final AsyncContext ctxt = req.startAsync();
ctxt.start(new Runnable()
{
@Override
public void run()
{
System.out.println("In AsyncContext / Start / Runnable / run");
ServletResponse response=ctxt.getResponse();
byte[] result="<h1>Hello World</h1>".getBytes();
try {
response.setContentType("text/html");
response.setCharacterEncoding("UTF-8");
response.setContentLength(result.length);
response.getOutputStream().write(result);
} catch (IOException e) {
e.printStackTrace();
}
ctxt.setTimeout(new Long(1000));
ctxt.complete();
}
});
}
}
public static void main(String[] args) throws Exception
{
Server server = new Server();
QueuedThreadPool queuedThreadPool=(QueuedThreadPool) server.getThreadPool();
queuedThreadPool.setMaxThreads(8);
ServerConnector serverConnector=new ServerConnector(server,1,4);
serverConnector.setHost("localhost");
serverConnector.setPort(9090);
// serverConnector.setAcceptQueueSize(100);
server.addConnector(serverConnector);
ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
ServletHolder asyncHolder = context.addServlet(EmbeddedAsyncServlet.class,"/*");
asyncHolder.setAsyncSupported(true);
server.setHandler(context);
server.start();
server.join();
}
}
при тестировании VertX я получаю пропускную способность 31 запрос/мин. Но при тестировании Jetty я получаю 310 запросов/секунд. Может ли кто-нибудь объяснить мне причину такого большого разрыва в производительности. Кроме того, просто к вашему сведению, я использую Apache Jmeter для сравнительного тестирования.
System.out.println
при обработке запросов. - person Jonas   schedule 04.05.2016