2012-06-19 11 views
5

में प्रगति संकेतक प्ले में किसी प्रकार के प्रगति संकेतक को लागू करने का सबसे अच्छा तरीका क्या है?प्ले फ्रेमवर्क

मेरे पास एक साधारण आयात पृष्ठ है जहां उपयोगकर्ता एक सीएसवी फ़ाइल अपलोड कर सकता है। तब तक सर्वर कुछ लम्बी प्रसंस्करण कर रहा है जब तक कि आयात पूरा न हो जाए। मैं अपलोड करने के बाद उपयोगकर्ता को एक अलग पृष्ठ पर रीडायरेक्ट करना चाहता हूं और उसे इस पृष्ठ पर कुछ लगातार प्रतिक्रिया देना चाहता हूं "856 डेटासेट के 150" आयात किए गए हैं।

अपलोड कार्रवाई एक नियंत्रक विधि को ट्रिगर करती है जो अपने स्वयं के धागे में समय लेने वाला कार्य शुरू कर सकती है, लेकिन मुझे किसी अन्य पृष्ठ से अजाक्स कॉल के साथ नौकरी की स्थिति कैसे प्राप्त हो सकती है (क्योंकि नाटक में कोई भी प्रकार नहीं है अनुरोधों के बीच राज्य)?

उत्तर

3

आपको जो करना है वह आपके नियंत्रक से नौकरी तैयार करना है। वास्तव में यदि आप Play दस्तावेज़ को पढ़ते हैं, तो आपको जॉब्स में लंबे समय तक चलने वाली प्रसंस्करण करने के लिए स्पष्ट रूप से प्रोत्साहित किया जाता है ताकि वे HTTP अनुरोध थ्रेड को न दबा सकें।

तो, आपकी सीएसवी फ़ाइल को संसाधित करके, आपका काम चल रहा है। अगला चरण रिकॉर्ड करना है जब प्रत्येक डेटासेट संसाधित किया गया हो। इसलिए, मान लीजिए कि आप अपनी नौकरी को एक यूआईडी या कुछ अद्वितीय नंबर की तरह संदर्भित करते हैं, जिसे आप अपने क्लाइंट को वापस भेज देते हैं। आपको अपनी अनूठी आईडी के विरुद्ध संसाधित डेटासेट की संख्या में वृद्धि के प्रत्येक वृद्धि को बढ़ाने के लिए बस रिकॉर्ड करने की आवश्यकता है (शायद डेटाबेस में यदि आप स्टेटलेसनेस और स्केल आसानी से अनुरूप होना चाहते हैं)।

उदाहरण

@Entity 
public class DatasetProgress extends Model { 

    public Long uid; 
    public Long datasetsDone; 
    public Long datasetsTotal; 

} 

फिर आप एक नियंत्रक कार्रवाई है कि आपके uid है, जो आप एक प्रगति बार दिखाने के लिए उपयोग कर सकते हैं के आधार पर DatasetProgress ऑब्जेक्ट बना सकते हैं के लिए

1

एक चीज जो आप कर सकते हैं, कुछ केंद्रीकृत अधिसूचना चीज है। आप आयात को कुछ अद्वितीय पहचानकर्ता दे सकते हैं और इस आईडी के साथ कुंजी अपडेट किए गए संदेश लिख सकते हैं। फिर स्थिति को पुनर्प्राप्त करने के लिए, आप बस उस कुंजी का उपयोग करें।

एक और विकल्प वेब-सॉकेट का उपयोग करना है और मूल रूप से अधिसूचनाओं को क्लाइंट को वापस धक्का देना है (हालांकि वे अभी तक व्यापक रूप से समर्थित नहीं हैं)।

+1

मैं इस काम को करने के लिए जॉन और @ कोडमेन्सी दोनों के जवाबों का उपयोग करता हूं, खासकर यदि आप सुनिश्चित हैं कि आप वेबसाकेट या कम से कम धूमकेतु का समर्थन करने वाले ब्राउज़र का उपयोग करेंगे। उस स्थिति में आप वास्तव में लाइव-जैसी प्रगति पट्टी बना सकते हैं। – biesior