- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 HttpAsyncClient 和 Jsoup 为特定站点编写网络抓取工具。我正在使用 HttpAsyncClient 的一个实例,它执行来自不同线程的多个请求。在几次成功的请求之后,客户端似乎挂起并且不会执行更多请求。调用 execute
方法会正常返回 FutureCallback
对象,但它的两个方法(completed
、failed
或 cancelled
)都不会执行。
通过查看日志,似乎请求从未发送过:
33572 [I/O dispatcher 1] DEBUG org.apache.http.impl.nio.client.MainClientExec - [exchange: 5] start execution
33573 [I/O dispatcher 1] DEBUG org.apache.http.client.protocol.RequestAddCookies - CookieSpec selected: default
33575 [I/O dispatcher 1] DEBUG org.apache.http.client.protocol.RequestAddCookies - Cookie [version: 0][name: .ASPXAUTH][value: removed][domain: www.predictit.org][path: /][expiry: null] match [(secure)www.predictit.org:443/Home/SingleOption]
33576 [I/O dispatcher 1] DEBUG org.apache.http.client.protocol.RequestAddCookies - Cookie [version: 0][name: ARRAffinity][value: removed][domain: www.predictit.org][path: /][expiry: null] match [(secure)www.predictit.org:443/Home/SingleOption]
33577 [I/O dispatcher 1] DEBUG org.apache.http.client.protocol.RequestAddCookies - Cookie [version: 0][name: ASP.NET_SessionId][value: removed][domain: www.predictit.org][path: /][expiry: null] match [(secure)www.predictit.org:443/Home/SingleOption]
33579 [I/O dispatcher 1] DEBUG org.apache.http.client.protocol.RequestAddCookies - Cookie [version: 0][name: __RequestVerificationToken][value: removed][domain: www.predictit.org][path: /][expiry: null] match [(secure)www.predictit.org:443/Home/SingleOption]
33579 [I/O dispatcher 1] DEBUG org.apache.http.client.protocol.RequestAuthCache - Auth cache not set in the context
33580 [I/O dispatcher 1] DEBUG org.apache.http.impl.nio.client.InternalHttpAsyncClient - [exchange: 5] Request connection for {s}->https://www.predictit.org:443
33580 [I/O dispatcher 1] DEBUG org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager - Connection request: [route: {s}->https://www.predictit.org:443][total kept alive: 1; route allocated: 1 of 2; total allocated: 1 of 20]
33581 [I/O dispatcher 1] DEBUG org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionImpl - http-outgoing-0 192.168.1.6:38559<->23.96.96.142:443[ACTIVE][r:r][ACTIVE][r][NOT_HANDSHAKING][0][0][0][0]: Set timeout 0
33581 [I/O dispatcher 1] DEBUG org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager - Connection leased: [id: http-outgoing-0][route: {s}->https://www.predictit.org:443][total kept alive: 0; route allocated: 1 of 2; total allocated: 1 of 20]
33582 [I/O dispatcher 1] DEBUG org.apache.http.impl.nio.client.InternalHttpAsyncClient - [exchange: 5] Connection allocated: CPoolProxy{http-outgoing-0 [ACTIVE]}
33582 [I/O dispatcher 1] DEBUG org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionImpl - http-outgoing-0 192.168.1.6:38559<->23.96.96.142:443[ACTIVE][r:r][ACTIVE][r][NOT_HANDSHAKING][0][0][0][0]: Set attribute http.nio.exchange-handler
33583 [I/O dispatcher 1] DEBUG org.apache.http.impl.nio.conn.ManagedNHttpClientConnectionImpl - http-outgoing-0 192.168.1.6:38559<->23.96.96.142:443[ACTIVE][rw:r][ACTIVE][rw][NOT_HANDSHAKING][0][0][0][0]: Event set [w]
它只是卡在最后一行,什么也没有发生。这似乎是某种死锁,但 CloseableHttpAsyncClient 应该是线程安全的。
您可以看到代码here如果你使用 these 创建一个 Maven 项目,你可以自己运行它(它有一个 main 方法)依赖关系。
感谢您的帮助。
最佳答案
看来我通过调用同一 HttpAsyncClient 返回的 FutureCallback 的 completed
方法内的 execute
方法导致了死锁。我更改了代码,以便 completed
方法仅返回在该方法完成后处理的链接列表,现在一切正常。
关于java - Apache 的 HttpAsyncClient 在执行后永远不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32031846/
我正在测试 Apache HttpAsyncClient ,特别是我想在需要身份验证的地方发出异步 HTTP POST 请求。我用this example作为引用。到目前为止,我找到了如何设置应用程序
我正在尝试在 httpAsyncClient 库中设置 cookie,但问题是我不知道如何找到它的示例..这是我的代码。 public JSONArray sendRequest(List post
我想了解有关 HttpAsyncClient 的一些基本概念。 我这里没有使用连接池,这里关闭失败的http请求的正确方法是什么(1)或(2)。 如果我用每个新请求初始化 httpclient,会对性
我想向 java 中的 servlet 发送异步 post 请求。我正在使用 apache HttpAsyncClient,如以下方法所示。当我调试时,我看到调用此方法的进程会等待,直到被调用的 se
我正在尝试使用 HttpAsyncClient 通过每秒提交一百或一千个 HTTP 请求并对每个请求的响应进行计时来对我的 Web 应用程序进行压力测试。我的代码基于 this quickstart
使用典型的 HttpAsyncClients 示例: public class AsyncClientHttpExchange { public static void main(final
在 Linux 上运行时(仅在 Linux 上尝试过),根据 lsof,以下代码似乎泄漏了 1 个 anon_inode 和 2 个管道文件描述符: CloseableHttpAsyncClient
我需要在高负载下使用 HttpAsyncClient。我这样创建 HttpAsyncClient: RequestConfig requestConfig = RequestConfig.custom
我想实现一个基于 NIO 的 aws java 客户端并且正在考虑使用 HttpAsyncClient但它处于 Alpha 3 阶段。有没有人有在任何负载下使用客户端的经验?另外,我们什么时候可以期待
我在 httpasyncclient 上使用代理,如下所示: final CloseableHttpAsyncClient httpclient = HttpAsyncClients
我的应用程序必须提供请求“转发”机制,从某种意义上说,它处理传入的请求并通过从根据请求确定的“目标”系统之一检索数据来响应它。这是通过 HttpAsyncClient 的集合来实现的,每个 HttpA
在 HttpClient 的早期版本中,目标主机被设置为客户端本身。在上一个版本中(对于 HttpAsyncClient,它是 4.1.1)主机被设置为 HttpRequest(HttpGet、Htt
与这个问题密切相关:How to use HttpClient with multithreaded operation? ,我想知道 apache HttpAsyncClient 是否是线程安全的,
使用 Apache HttpAsyncClient Beta3,当我将它加载到各种服务器的多达 50 个并发请求时,它似乎开始时很好,我处理了大约 3000 个 url。 但后来我遇到了瓶颈,我通过日
我是否需要像使用 HttpClient 那样关闭 Apache HttpAsyncClient 中的过期连接? 最佳答案 我只是仔细检查了源代码。是的,仍然必须明确地从池中驱逐过期的连接。但是,底层的
我正在用 Java 实现网络抓取工具。在尝试了一些我要抓取的网站之后,我想使用 Java 中并发 HTTP 连接的最佳实践。我目前正在使用 Jsoup's连接方法。我想知道是否可以创建线程并在这些线程
在我的 servlet 中,我正在执行以下代码: RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(3000)
package com.lt.uadb.app.resource.test; import java.util.concurrent.Future; import org.apache.http.Ht
我正在使用 HttpAsyncClient 和 Jsoup 为特定站点编写网络抓取工具。我正在使用 HttpAsyncClient 的一个实例,它执行来自不同线程的多个请求。在几次成功的请求之后,客户
我正在尝试通过 Java 使用 ElasticSearch REST API Apache HttpAsyncClient图书馆。我想使用持久流水线连接。这是一些测试代码(输出在注释中): @Test
我是一名优秀的程序员,十分优秀!