Dropwizard / Jersey HTTP Servlet连接重置但泽西资源很好

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dropwizard / Jersey HTTP Servlet连接重置但泽西资源很好相关的知识,希望对你有一定的参考价值。

我使用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的原因是我发布的数据是原始二进制文件,使用输入/输出流更容易处理它。

答案

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

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

而不是打电话给response.getOutputStream().close()

以上是关于Dropwizard / Jersey HTTP Servlet连接重置但泽西资源很好的主要内容,如果未能解决你的问题,请参考以下文章

DropWizard/Jersey API 客户端

使用Dropwizard的Jersey过滤器,拦截器和MessageBodyReader

使用Dropwizard时配置Jackson映射器

Jetty 和 Dropwizard:如何始终返回 200 而不是 404、500 等

Dropwizard + Raml -> 空资源

无法正确运行DropWizard服务器端