我使用泽西资源和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的原因是我发布的数据是原始二进制文件,使用输入/输出流更容易处理它。
答案 0 :(得分:0)
我找到了原因。这是由于Keep Alive连接,我需要在响应中设置Content-Length标头。
response.setContentLength(out.len());
response.getOutputStream().write(out.get(), 0, out.len());
response.getOutputStream().flush();
不要拨打response.getOutputStream().close()