Java Restlets 2.1-RC1-所需的示例performant Clienter源代码
我们正在尝试开发/调优一个restlet客户机,该客户机将以每秒10+的速度通过HTTP发送请求 提供用于消耗资源的示例客户端代码。他们的例子是Java Restlets 2.1-RC1-所需的示例performant Clienter源代码,java,web-services,http,restlet,restlet-2.0,Java,Web Services,Http,Restlet,Restlet 2.0,我们正在尝试开发/调优一个restlet客户机,该客户机将以每秒10+的速度通过HTTP发送请求 提供用于消耗资源的示例客户端代码。他们的例子是 ClientResource clientResource = new ClientResource( "http://localhost:8182/rest/test"); TestResource testResource = clientResource.wrap(TestResource.class);
ClientResource clientResource = new ClientResource(
"http://localhost:8182/rest/test");
TestResource testResource = clientResource.wrap(TestResource.class);
// Retrieve the JSON value
Customer result = testResource.retrieve();
然而(以及维基上的评论)说这种方法存在问题
似乎不清楚是否应该调用release()
和/或detain()
来释放资源。我试过了
ClientResource cs = new ClientResource(rootConnectionString);
final Representation rep = cs.post(s);
if (rep != null) {
final long numBytes = rep.exhaust();
rep.release();
}
我们的客户端应用程序不能依赖垃圾收集器来避免资源耗尽。理想情况下,我们将重复使用相同的连接/套接字以提高性能
我问的原因是,我们的应用程序在性能测试中工作不好,我们看到间歇性问题。我认为这些都是客户端的,因为使用其他工具对服务器进行负载测试是可以的
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:149)
at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:110)
at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:260)
at org.apache.http.impl.conn.LoggingSessionInputBuffer.readLine(LoggingSessionInputBuffer.java:115)
at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:98)
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:252)
at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281)
at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:247)
at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219)
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:298)
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:645)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:464)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
at org.restlet.ext.httpclient.internal.HttpMethodCall.sendRequest(HttpMethodCall.java:333)
at org.restlet.engine.adapter.ClientAdapter.commit(ClientAdapter.java:111)
at org.restlet.engine.adapter.HttpClientHelper.handle(HttpClientHelper.java:109)
at org.restlet.Client.handle(Client.java:190)
at org.restlet.resource.ClientResource.handle(ClientResource.java:1064)
at org.restlet.resource.ClientResource.handleOutbound(ClientResource.java:1153)
at org.restlet.resource.ClientResource.handle(ClientResource.java:996)
at org.restlet.resource.ClientResource.handle(ClientResource.java:972)
at org.restlet.resource.ClientResource.post(ClientResource.java:1381)
at org.restlet.resource.ClientResource.post(ClientResource.java:1327)
真正有帮助的是一些正确清理的示例代码。问候,
基兰