5

我一直在为我的客户端代码配置 Restlet。我正在使用 Restlet 2 和 HttpClient 4。我将扩展 jar 和 HttpClient jar 添加到构建路径中,它似乎可以工作。

但是,我不知道如何详细配置它。我没有手动创建任何客户端,而是使用ClientResources 进行交互,这是我直接使用 Restlet 的唯一部分。客户端的具体实例化似乎隐藏在框架实现中。我发现了一些如何配置客户端的提示,但它们都是为 Restlet 1.x 编写的。

具体来说,我想配置以下部分:

  • 更改客户端请求的用户代理。clientResource.getClientInfo().setAgent(…)不起作用。
  • 增加每台主机的并行连接数。
  • 为每个主机启用持久连接和池。显然,到目前为止,Restlet 创建了一个新的连接 per ClientResource,这并不是很有效。

当然,我已经看过HttpClientHelper,但我不知道在哪里以及如何添加它。已经搜索了该文档,但没有命中。

感谢帮助!

4

1 回答 1

4

首先,要确保您的 Restlet 使用 Apache 的 HttpClient 进行连接,您需要在类路径中有 org.restlet.ext.httpclient.jar。其次,您是否将 a 传递给您Context的构造函数ClientResource?如果没有,您将需要:

    final Context context = new Context();
    context.getParameters().set("maxConnectionsPerHost", "20");

    final ClientResource requestResource = new ClientResource(context, "http://localhost:8182/request");
    requestResource.getClientInfo().setAgent("Example-Client/1.0");

这可以处理maxConnectionsPerHost您感兴趣的设置。此外,呼叫setAgent对我来说也按预期工作。我不确定您的实例中可能存在什么问题。

关于持久连接,似乎 HttpClient 会为您解决这个问题。Restlet 使用此处ThreadSafeClientConnManager描述的 HttpClient 。它提到了对该链接的持久连接的支持。似乎这个对象也会处理你的池化问题。您可能希望重用相同的实例来利用这一点。我没有立即意识到的线程安全策略,但我希望它是线程安全的。ClientResourceClientResource

于 2010-07-18T16:19:35.747 回答