配置HttpClient以用作Restlet客户端

时间:2010-07-18 11:15:59

标签: java httpclient restlet

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

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

详细说明,我想配置以下部分:

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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

首先,为了确保您使用Apache的HttpClient进行连接,您需要在类路径上使用org.restlet.ext.httpclient.jar。其次,您是否将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使用HttpClient的ThreadSafeClientConnManager描述here。它提到了对该链接的持久连接的支持。看来这个对象也会照顾你的池问题。您可能希望重用ClientResource的相同实例来利用此功能。我不是立即知道ClientResource的线程安全策略,但我希望它是线程安全的。