5.1 sendAsync() পদ্ধতি
আপনি HttpClient ব্যবহার করে অ্যাসিঙ্ক্রোনাস অনুরোধ পাঠাতে পারেন। সাধারণত এটি তিনটি ক্ষেত্রে করা হয়।
প্রথম ক্ষেত্রে অনুরোধটি খুব দীর্ঘ সময় নেবে , উদাহরণস্বরূপ, একটি ফাইল পাঠানো / গ্রহণ করা। এই অপারেশনটি শুরু হয় এবং অ্যাসিঙ্ক্রোনাসভাবে চালানো হয়।
দ্বিতীয় ক্ষেত্রে আপনাকে প্রায়ই অনুরোধ পাঠাতে হবে এবং আপনি পরেরটি পাঠানোর আগে পূর্ববর্তী অনুরোধের প্রতিক্রিয়ার জন্য অপেক্ষা করতে চান না।
এবং অবশেষে, তৃতীয় ক্ষেত্রে - আপনার অনুরোধের ফলাফল আপনার কাছে গুরুত্বপূর্ণ নয় । উদাহরণস্বরূপ, আপনি প্রতি মিনিটে একবার আপনার স্ক্রিনের একটি স্ক্রিনশট নিন এবং এটি সার্ভারে পাঠান। অর্থাৎ, আপনার আবেদনের যুক্তি অনুমান করে যে অনেকগুলি অনুরোধ রয়েছে এবং সবগুলি তাদের কাছে পৌঁছায় না। তারপর নীতি অনুসারে কাজ করা সুবিধাজনক - পাঠান এবং ভুলে যান।
একটি অ্যাসিঙ্ক্রোনাস অনুরোধ পাঠানোর জন্য, আপনাকে sendAsync()
HttpClient ক্লাসের একটি বস্তুতে একটি পদ্ধতি কল করতে হবে। এই পদ্ধতিটি অবিলম্বে প্রস্থান করে এবং একটি ফেরত দেয় CompletableFuture<HttpResponse>
। এটির সাহায্যে, আপনি কখন অনুরোধটি বাস্তবে কার্যকর করা হয় তা ট্র্যাক করতে পারেন, সেইসাথে অনুরোধটি সম্পূর্ণ হওয়ার পরে নির্দিষ্ট কোডটি কার্যকর করতে পারেন। উদাহরণ:
HttpClient client = HttpClient.newBuilder().build();
CompletableFuture<HttpResponse<String>> response = client.sendAsync(
request,
HttpResponse.BodyHandlers.ofString()
);
পদ্ধতিটি sendAsync()
এমন একটি অবজেক্ট রিটার্ন করে CompletableFuture
যার ভিতরে একটি HttpResponse রয়েছে, যার মধ্যে স্ট্রিং রয়েছে যা সার্ভারটি ফিরিয়ে দেবে।
5.2 এক্সিকিউটর() পদ্ধতি, এক্সিকিউটর সার্ভিস
এছাড়াও, HttpClient আপনাকে এটিতে ExecutorService
(থ্রেডগুলির একটি পুল) পাস করার অনুমতি দেয় যা অ্যাসিঙ্ক্রোনাস অনুরোধগুলি সম্পাদন করতে ব্যবহৃত হবে। প্রকৃতপক্ষে, সার্ভার-সাইড জাভা অ্যাপ্লিকেশনগুলিতে, এটি সর্বদা করা হয়।
সর্বোপরি, যদি আপনার API-তে প্রতিটি আগত অনুরোধের জন্য, আপনি অন্য কোথাও বেশ কয়েকটি অ্যাসিঙ্ক্রোনাস অনুরোধ চালু করবেন, আপনার কাছে পর্যাপ্ত থ্রেড থাকবে না। উদাহরণ:
ExecutorService executorService = Executors.newFixedThreadPool(2);
CompletableFuture<HttpResponse<String>> response1 = HttpClient.newBuilder()
.executor(executorService)
.build()
.sendAsync(request, HttpResponse.BodyHandlers.ofString());
CompletableFuture<HttpResponse<String>> response2 = HttpClient.newBuilder()
.executor(executorService)
.build()
.sendAsync(request, HttpResponse.BodyHandlers.ofString());
যদি থ্রেড পুল সেট করা না থাকে, তাহলে ডিফল্ট হয় ।java.util.concurrent.Executors.newCachedThreadPool()
GO TO FULL VERSION