我无法为我的客户端代码配置Restlet。我正在使用Restlet 2和HttpClient 4.我将扩展jar和HttpClient jar添加到构建路径,它似乎工作。
但是,我不知道如何详细配置它。我没有手动创建任何客户端,而是使用ClientResource
进行交互,这是我直接使用Restlet的唯一部分。客户端的具体实例似乎隐藏在框架实现中。我发现了一些如何配置客户端的提示,但它们都是为Restlet 1.x编写的。
详细说明,我想配置以下部分:
clientResource.getClientInfo().setAgent(…)
不起作用。 ClientResource
创建一个新的连接,这不是很有效。当然,我已经看过HttpClientHelper,但我不知道在哪里以及如何添加它。已经搜索了文档,但没有点击。
感谢您的帮助!
答案 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
的线程安全策略,但我希望它是线程安全的。