【问题标题】:Dropwizard / Jersey HTTP Servlet Connection Reset but Jersey Resource is fineDropwizard / Jersey HTTP Servlet 连接重置但 Jersey 资源很好
【发布时间】:2018-01-04 16:42:14
【问题描述】:

我使用 Jersey Resources 和 environment.servlets().addServlet(newServlet) 实现了一个 API,看看哪个会更快。

两者都做同样的事情。但是当我在这两个实现上运行 AB 基准测试时,使用 Jersey Resource 可以正常工作,但使用 Servlet 我得到apr_socket_recv: Connection reset by peer (54)

这只发生在并发请求命中时:

ab -n 10000 -c 100 -k -T application/binary -p req.bin http://localhost:8142/

知道为什么 Servlet 会有这个问题吗? (我想使用 servlet 的原因是我发布的数据是原始二进制文件,并且使用输入/输出流更容易在那里处理。

【问题讨论】:

    标签: java servlets jersey dropwizard


    【解决方案1】:

    我找到了原因。由于 Keep Alive 连接,我需要在响应中设置 Content-Length 标头。

            response.setContentLength(out.len());
            response.getOutputStream().write(out.get(), 0, out.len());
            response.getOutputStream().flush();
    

    不要打电话给response.getOutputStream().close()

    【讨论】:

      猜你喜欢
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-06
      • 2016-12-05
      • 2011-11-19
      • 2011-12-20
      相关资源
      最近更新 更多