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



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

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

我想支持在从服务器读取时中断线程,目前在使用URL#openConnection()时,如果线程一直在等待服务器的响应,则无法通过中断线程来解除阻塞。

我自己从未使用过它,但看起来最符合您需求的是一个无阻塞的HTTP客户端。我所知道的唯一实现是基于Netty的Spring反应式客户端: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团队提供了高级文档来提供帮助。

相关内容

最新更新