Java HTTP-клиент, который использует SocketChannel, чтобы я мог прерывать потоки, читающие запрос - PullRequest
0 голосов
/ 18 марта 2020

Похоже, SocketChannel поддерживает прерывание, а обычные сокеты - нет.

Есть ли какие-либо java HTTP-клиенты, которые могут использовать SocketChannel вместо Socket.

Я хотел бы поддержать прерывание потоков при чтении с сервера, в настоящее время при использовании URL#openConnection(), если поток застрял в ожидании ответа от сервера, его нельзя открепить, прерывая его.

1 Ответ

1 голос
/ 23 марта 2020

Я никогда не использовал его сам, но похоже, что самым близким к вашим потребностям является неблокирующий HTTP-клиент. Единственная известная мне реализация - это Реактивный клиент Spring на основе 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 предоставляет расширенную документацию , чтобы помочь.

...