Saturday 15 September 2012

php - jQuery: Can I send and receive an $.ajax response while a longer $.ajax request is pending? -


स्थिति:
मैं एक $। एजेक्स () POST का उपयोग कर रहा हूं एक php स्क्रिप्ट का अनुरोध करें जो लगभग 400,000-500,000 लाइनों को डीबी में सम्मिलित करता है। यह लगातार 3.5 से 4 मिनट लगते हैं। (इस समय के दौरान, अनुरोध लंबित है)।

समस्या:
मुझे पृष्ठ पर प्रगति दिखाने के लिए कुछ रास्ता चाहिए। (जैसे की %)। मैंने एक $ .एजेंड () का प्रयोग एक सेट इन्टरवॉल में करने की कोशिश की जो प्रत्येक 5 सेकंड या उससे अधिक की जांच करता है, लेकिन वे ऊपर उठने लगते हैं और सभी के माध्यम से आते हैं जब पहले (अधिक) $। एजेक्स () समाप्त हो जाता है।

प्रश्न:
$ .ajax () डिफ़ॉल्ट रूप से async नहीं है? इसका मतलब यह नहीं होना चाहिए कि अनुरोध किसी भी क्रम में और किसी भी समय भेजा जा सकता है, और किसी भी समय और किसी भी समय प्रतिक्रियाओं को प्राप्त किया जाना चाहिए? क्या यह भी async के साथ करने के लिए कुछ भी है? क्या एक अनुरोध से 'अर्ध-प्रतिक्रियाओं' को समय-समय पर वापस भेजने का एक तरीका है? या मैं लंबित अनुरोध / प्रतिक्रिया के दौरान अनुरोध / प्रतिक्रियाओं को भेज और प्राप्त नहीं कर सकता हूं? (नीचे भयानक ड्राइंग देखें)

पहले से धन्यवाद!

आपका लंबे समय से चलने वाला अजाक्स-कॉल शायद सर्वर पर एक सत्र खोलता है, इसलिए सभी अगली अनुरोध एक सत्र फ़ाइल लॉक के कारण अवरोधित हैं।

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

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

और जानकारी यहां है:

No comments:

Post a Comment