AsyncHttpClient
का उपयोग Netty
प्रदाता के साथ मुख्य प्रोग्राम को समाप्त करने से रोक देगा जब हम एक एसिंक्रोनस अनुरोध निष्पादित करते हैं। उदाहरण के लिए निम्नलिखित कार्यक्रम println
के बाद समाप्त हो जाता है, या नहीं, चाहे प्रदाता JDKAsyncHttpProvider
या NettyAsyncHttpProvider
है पर निर्भर करता है:एसिंक्रोनस एचटीपी अनुरोध के लिए नेटटी के साथ AsyncHttpClient को कैसे बंद करें?
public class Program {
public static CompletableFuture<Response> getDataAsync(String uri) {
final AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
final CompletableFuture<Response> promise = new CompletableFuture<>();
asyncHttpClient
.prepareGet(uri)
.execute(new AsyncCompletionHandler<Response>(){
@Override
public Response onCompleted(Response resp) throws Exception {
promise.complete(resp);
asyncHttpClient.close(); // ??? Is this correct ????
return resp;
}
});
return promise;
}
public static void main(String [] args) throws Exception {
final String uri = "…";
System.out.println(getDataAsync(uri).get());
}
}
बारे AsynHttpClient
प्रलेखन राज्यों:
AHC एक अमूर्त परत है जो नंगे जेडीके, नेटटी और ग्रीज़ली के शीर्ष पर काम कर सकता है। ध्यान दें कि जेडीके कार्यान्वयन बहुत सीमित है और आपको वास्तव में अन्य वास्तविक प्रदाताओं का उपयोग करना चाहिए।
नेटटी के साथ AsyncHttpClient का उपयोग करने के लिए हमें जावा क्लास पथ में संबंधित लाइब्रेरी को शामिल करने की आवश्यकता है। तो, हम निम्नलिखित वर्ग पथ विन्यास में से एक के साथ पिछले Program
चला सकते हैं Netty, या नहीं का उपयोग करें:
-cp .;async-http-client-1.9.24.jar;netty-3.10.3.Final.jar;slf4j-api-1.7.12.jar
का उपयोग करेगाNettyAsyncHttpProvider
-cp .;async-http-client-1.9.24.jar;slf4j-api-1.7.12.jar
JDKAsyncHttpProvider
का उपयोग करेगा हम और क्या चाहिए Netty प्रदाता का सही ढंग से उपयोग करने के लिए करते हैं? उदाहरण के लिए, मैं AsyncCompletionHandler
में बंद कर रहा हूं। क्या वो सही है?
क्या देखा गया व्यवहार बदलने के लिए कोई विन्यास है?
'AsyncHttpClient' धागा सुरक्षित नहीं है:
यहाँ निशान है? प्रत्येक विधि आमंत्रण पर नया न बनाएं। –
यदि आप क्लाइंट को बाद में बंद करने का प्रयास करते हैं, उदा। 'तब स्वीकार करें' के बाद, क्या आपका आवेदन समाप्त हो जाएगा? – ZhongYu
नहीं बंद करना, या नहीं, asyncHttpClient का परिणामी व्यवहार में कोई प्रभाव नहीं है। –