看起来 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/