2012-09-28 7 views
6

प्ले को 'प्रतिक्रियाशील' ढांचे के रूप में वर्णित किया गया है, जो एसिंक प्रोग्रामिंग के लिए उपयोगी है। मैं नाटक के वास्तुकला के बारे में अधिक जानना चाहता हूं, मुख्य रूप से:प्ले थ्रेड आर्किटेक्चर

  • क्या इसमें कोई ईवेंट लूप है?

  • क्या इसमें कई अक्का अभिनेता सिस्टम हैं? क्या वे कई थ्रेड पूल से समर्थित हैं?

  • तो कितने धागा पूल देखते हैं और वे क्या उद्देश्य हैं तो (मार्ग, से निपटने का अनुरोध करें, redeeming, anorm वादा आदि)

  • कौन सा निष्पादन की धागा है हम ठीक ब्लॉक करने के लिए कर रहे हैं (हम कुछ महंगी गणना कहां कर सकते हैं)? निष्पादन का धागा कौन सा कभी नहीं रोकना चाहिए?

इस पर कोई संसाधन/विकी/सलाह वास्तव में सहायक है। धन्यवाद

उत्तर

7

नोट: निम्न सामग्री Play के लिए है! 2.1.x. खेलने हेतु! 2.0.4 nico_ekito का जवाब देखें।

एक ग्राहक के साथ बातचीत निम्न चार्ट द्वारा संक्षेप किया जा सकता है:

Play!’s architecture

प्ले के HTTP हैंडलर (Netty के शीर्ष पर बनाया गया) अपने स्वयं के निष्पादन संदर्भ में रहती है। जब यह अनुरोध प्राप्त होता है, तो यह यूआरएल के अनुसार कॉल करने के लिए एप्लिकेशन के एंट्री पॉइंट को खोजने का प्रयास करता है (एप्लिकेशन की conf/routes फ़ाइल का उपयोग करके)। इस बिंदु पर, केवल HTTP अनुरोध के शीर्षलेख स्मृति में लोड होते हैं।

फिर, प्रवेश बिंदु कहा जाता है। यह आमतौर पर action होता है, जो शेष शरीर को लोड करता है, यदि कोई हो। यह एक अलग निष्पादन संदर्भ में होता है, प्ले! "उपयोगकर्ता" निष्पादन संदर्भ, जिसे एक अक्का अभिनेता प्रेषक के रूप में परिभाषित किया गया है जिसे अनुप्रयोगों की conf/application.conf फ़ाइल में कॉन्फ़िगर किया जा सकता है।

अंत में, एक क्रिया के अंदर आप एसिंक्रोनस कॉल कर सकते हैं (उदा। Web Service पर कॉल करने के लिए)। इन सभी एसिंक्रोनस कॉल स्कैला के Future एपीआई का उपयोग करते हैं, इसलिए वे कॉल साइट पर दायरे में उपलब्ध निष्पादन संदर्भ का उपयोग करते हैं। तो आप Play का उपयोग कर सकते हैं! "उपयोगकर्ता" निष्पादन संदर्भ (play.api.libs.concurrent.Execution.defaultContext में परिभाषित)।

संक्षेप में, प्ले करें! निम्न कार्यों के लिए अलग निष्पादन संदर्भों का उपयोग करता है:

  • अनुरोध प्राप्त करें (नेटटी HTTP हैंडलर);
  • कॉल क्रियाएं ("उपयोगकर्ता" निष्पादन संदर्भ)।

और आप अपने एसिंक्रोनस कंप्यूटेशंस (प्ले सहित! "उपयोगकर्ता" निष्पादन संदर्भ) के लिए जो भी निष्पादन संदर्भ चाहते हैं उसका उपयोग करने के लिए स्वतंत्र हैं।

विचार यह है कि सभी उपयोगकर्ता कोड डिफ़ॉल्ट रूप से Play का उपयोग करते हैं! "उपयोगकर्ता" निष्पादन संदर्भ। यदि आप इसे अवरुद्ध करते हैं तो आप अधिक उपयोगकर्ता कोड चलाने में सक्षम नहीं होंगे लेकिन बाकी सब कुछ जारी रख सकते हैं।

यदि आप विस्तृत कंप्यूटेशंस कर रहे हैं तो मैं आपको एक समर्पित निष्पादन संदर्भ का उपयोग करने का सुझाव देता हूं।

+0

धन्यवाद @ जुलिएन। तो उपयोगकर्ता निष्पादन संदर्भ (जो डिफ़ॉल्ट है) को 'application.conf' में tweaked किया जा सकता है? यह डिफ़ॉल्ट विन्यास क्या है? –

+0

प्रेषक का नाम 'play' है, आप इसे किसी भी [अक्का प्रेषक] (http://doc.akka.io/docs/akka/2.1.0-RC1/scala/dispatchers.html) के रूप में कॉन्फ़िगर कर सकते हैं। –

1

अक्का डिफ़ॉल्ट कॉन्फ़िगरेशन और the Play! wiki पर कलाकारों की सूची पर नज़र डालें।

संबंधित मुद्दे