簡體   English   中英

配置HttpClient以用作Restlet客戶端

[英]Configuring HttpClient for usage as Restlet client

我無法為我的客戶端代碼配置Restlet。 我正在使用Restlet 2和HttpClient 4.我將擴展jar和HttpClient jar添加到構建路徑,它似乎工作。

但是,我不知道如何詳細配置它。 我沒有手動創建任何客戶端,而是使用ClientResource進行交互,這是我直接使用Restlet的唯一部分。 客戶端的具體實例似乎隱藏在框架實現中。 我發現了一些如何配置客戶端的提示,但它們都是為Restlet 1.x編寫的。

詳細地說,我想配置以下部分:

  • 更改客戶端請求的用戶代理。 clientResource.getClientInfo().setAgent(…)不起作用。
  • 增加每個主機的並行連接數。
  • 啟用每個主機的持久連接和池。 顯然,Restlet到目前為止每個ClientResource創建一個新的連接,這不是很有效。

當然,我已經看過HttpClientHelper ,但我不知道在哪里以及如何添加它。 已經搜索了文檔,但沒有點擊。

感謝幫助!

首先,為了確保您使用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 它提到了對該鏈接的持久連接的支持。 看來這個對象也會照顧你的池問題。 您可能希望重用ClientResource的相同實例來利用此功能。 我沒有立即意識到ClientResource的線程安全策略,但我希望它是線程安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM