使用 SocketChannel 的 Java HTTP 客户端,以便我可以中断读取请求的线程

标签 java nio

看起来 SocketChannel 支持中断,但常规套接字不支持。

是否存在能够使用SocketChannel而不是Socket的java HTTP客户端。

我希望支持从服务器读取数据时中断线程,当前使用 URL#openConnection() 时,如果线程被卡住等待服务器的响应,则无法通过以下方式取消卡住:打断它。

最佳答案

我自己从未使用过它,但看起来最接近您需要的是非阻塞 HTTP 客户端。我知道的唯一实现是 Netty based Spring reactive client: reactor-netty .

它应该允许你做这样的事情:

final Mono<HttpClientResponse> futureResponse = HttpClient.create()
           .baseUrl("http://example.com")
           .get()
           .response();

final Disposable httpHandle = response.subscribe(
    response -> onSuccess(response),
    response -> onError(response)
);

// When you want to force disconnection
httpHandle.dispose();

注意:但是要小心,因为我真的不知道这个系统的局限性。然而,Spring team provides advanced documentation来帮忙。

关于使用 SocketChannel 的 Java HTTP 客户端,以便我可以中断读取请求的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60733471/

相关文章:

java - 项目处理器的 Spring Batch 原型(prototype)范围

java - 为什么在解析 XML 时得到空节点值

java - 我们需要有关使用 Java NIO 实现服务器软件的建议

java - 通过扫描文件系统查找直接和间接子类

java - 避免 Java 8 Files.walk(..) 终止原因 ( java.nio.file.AccessDeniedException )

apache - org.apache.coyote.ajp.AjpMessage.processHeader 收到带有签名 18245 的无效消息

java - 删除了 Linux 标识符

java - 如何使用 GSON 解析没有根元素的 JSON 文件

java - 有人可以帮助我玩 Hangman 游戏吗?

Java NIO : Relationship between OP_ACCEPT and OP_READ?