gpt4 book ai didi

java - VertX 与 Jetty 性能问题

转载 作者:行者123 更新时间:2023-12-01 09:58:24 25 4
gpt4 key购买 nike

我正在对 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 进行基准测试。

最佳答案

您的 Vert.x 实现存在一些问题,例如您没有结束连接,这将导致连接超时。

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();
// by default it is 200 so this is optional
response.setStatusCode(HttpStatus.SC_OK);
System.out.println("re received");
response.putHeader("Content-Length", Integer.toString(5));
// what you're doing here is wrong you should end the response
// response.write("Hello");
response.end("Hello");
// You should use write if you are going to use chunked responses
// and the last one should be a end to notify that the request
// is finished
}
}).listen(9091);
}
}

有关如何处理 http 响应的完整文档是 here .

它将解释分块写入(您所做的)和结束响应之间的差异。

关于java - VertX 与 Jetty 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37007694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com