डीबी को एसक्यूएल कॉल के सामान्य निष्पादन में आम तौर पर अवरुद्ध और निष्पादित किया जाता है। एसिंक्रोनस निष्पादन के लिए Play का बहुत अच्छा समर्थन है जो आपके ऐप के प्रदर्शन को बेहतर बनाता है।
कार्य कोड नमूने के लिए खेलते हैं 2,0
public static Result slow() {
Logger.debug("slow started");
// Start execution
Promise<DataObject> userObject1 = SlowQuery.getUser(440);
Promise<DataObject> userObject2 = SlowQuery.getCategory(420);
// ... here execution is already in progress ...
// Map to Promise Objects
Promise<DataObject> res1 = userObject1.map(new Function<DataObject, DataObject>() {
public DataObject apply(DataObject res) {
Logger.debug("Got result (userObject1): " + res.toString());
return res;
}
});
Promise<DataObject> res2 = userObject2.map(new Function<DataObject, DataObject>() {
public DataObject apply(DataObject res) {
Logger.debug("Got result (userObject2): " + res.toString());
return res;
}
});
// here we wait for completion - this blocks
userObject1.getWrappedPromise().await();
userObject2.getWrappedPromise().await();
// the result is available
Logger.debug(res1.get().toString());
Logger.debug(res2.get().toString());
Logger.debug("slow finished");
return ok("done");
}
समुदाय विकी सुविधा का उपयोग कर सुधार करने के लिए स्वतंत्र लग रहा है - मुझे यकीन है कि कुछ भागों छोटा किया जा सकता हूँ।
धन्यवाद। मुझे यकीन नहीं है कि मैं समझता हूं कि नौकरियां कैसे अवरुद्ध हो सकती हैं। अगर मेरा MySQL क्लाइंट अवरुद्ध हो रहा है, तो इसे नौकरी के भीतर उपयोग करना अभी भी अवरुद्ध होगा, नहीं? या हर बार जब कोई नया काम बनाया जाता है तो क्या एक नया धागा फैलता है? उस स्थिति में यह एक एसिंक फ्रेमवर्क के पूरे उद्देश्य को हरा देता है। – Continuation
@ संयोजक मुझे लगता है कि आप "एसिंक्रोनस फ्रेमवर्क" को भ्रमित कर सकते हैं "प्ले के संबंध में" अतुल्यकालिक संचालन में सक्षम ढांचे "के साथ! ढांचा? जैसा कि लिंक किए गए दस्तावेज बताते हैं, आप HTTP अनुरोध से असीमित रूप से लंबे समय से चलने वाले संचालन करने और अन्य आने वाले HTTP अनुरोधों को गैर-अवरुद्ध करने के लिए नौकरियों का उपयोग कर सकते हैं। – tmbrggmn