2010-05-26 12 views
6

सच बहु-थ्रेडेड प्राप्त करने के लिए AJAX का उपयोग कर सकते हैं? यदि कर सकते हैं, तो कैसे करें? कृपया मुझे कुछ संबंधित जानकारी, वेबसाइट या किताबें दें। धन्यवाद ~!AJAX मल्टी-थ्रेडेड

उत्तर

15

यह "बहुप्रचारित" से आपका क्या मतलब है इस पर निर्भर करता है।

जावास्क्रिप्ट कोड स्पष्ट रूप से सिंगलथ्रेड किया गया है। कोई जावास्क्रिप्ट कोड वर्तमान में उसी पृष्ठ पर निष्पादित किसी अन्य जावास्क्रिप्ट कोड को बाधित नहीं करेगा। एक AJAX (XHR) अनुरोध ब्राउज़र को कुछ करने के लिए ट्रिगर करेगा और (आमतौर पर) पूर्ण होने पर कॉलबैक को कॉल करेगा।

सर्वर पर प्रत्येक अजाक्स अनुरोध एक अलग HTTP अनुरोध है। इनमें से प्रत्येक अपने धागे पर निष्पादित करेगा। वें वेब सर्वर कॉन्फ़िगरेशन के आधार पर, वे उसी मशीन पर भी निष्पादित नहीं हो सकते हैं। लेकिन प्रत्येक PHP स्क्रिप्ट इंस्टेंस पूरी तरह से अलग होगा, भले ही एक ही स्क्रिप्ट को कॉल किया जाए। प्रति साझा कोई राज्य नहीं है।

अब ब्राउज़र आमतौर पर प्रति पृष्ठ आधार पर एक पृष्ठ बना सकते हैं एक साथ अजाक्स अनुरोधों की संख्या को कैप कर सकते हैं। यह संख्या आम तौर पर 2 है। मेरा मानना ​​है कि आप इसे बदल सकते हैं, लेकिन अधिकांश लोगों के पास डिफ़ॉल्ट मान होगा, इसलिए आपको यह मानना ​​होगा कि यह 2 होगा। मौजूदा अनुरोध पूरा होने तक उससे अधिक अनुरोध कतारबद्ध होंगे। इससे req1.example.com, req2.example.com, आदि जैसे कई होस्ट नाम बनाने जैसी परेशान चीजें हो सकती हैं।

एक अपवाद सत्र है लेकिन वे बहुसंख्यक नहीं हैं। एक सत्र शुरू करने से सटीक उसी सत्र (कुकी पर आधारित) शुरू करने का प्रयास करने वाली सभी अन्य स्क्रिप्ट को अवरुद्ध कर दिया जाएगा। यह एक कारण है कि आपको सत्र के लिए खोले जाने की अवधि को कम करने की आवश्यकता क्यों है। तर्कसंगत रूप से आप एक डेटाबेस या कुछ ऐसा कर सकते हैं जैसे memcache इंटर-स्क्रिप्ट संचार को कुचलने के लिए, लेकिन यह वास्तव में PHP के बारे में नहीं है।

PHP सरल अनुरोध प्रसंस्करण के लिए सबसे अच्छा उपयोग किया जाता है। एक अनुरोध प्राप्त हुआ है। यह संसाधित हो जाता है और एक प्रतिक्रिया वापस आती है। यह प्रतिक्रिया एचटीएमएल, एक्सएमएल, टेक्स्ट, जेएसओएन या जो भी हो सकती है। अनुरोध ब्राउज़र या AJAX अनुरोध से HTTP अनुरोध हो सकता है।

इनमें से प्रत्येक अनुरोध-प्रतिक्रिया चक्र, जहां संभव हो, अलग इकाइयों के रूप में माना जाना चाहिए।

उपयोग की जाने वाली एक और तकनीक लंबी-मतदान है। सर्वर पर एक HTTP अनुरोध भेजा जाता है और लंबे समय तक वापस नहीं आ सकता है। इसका उपयोग वेब-आधारित चैट और अन्य "सर्वर पुश" प्रकार परिदृश्यों के लिए किया जाता है। कभी-कभी आंशिक प्रतिक्रिया अनुरोध समाप्त किए बिना फ़्लश किया जाएगा।

अंतिम विकल्प (यूनिक्स/लिनक्स पर कम से कम) यह है कि PHP प्रक्रियाओं को जन्म दे सकता है लेकिन ऐसा लगता है कि आप इसका जिक्र नहीं कर रहे हैं।

तो आप वास्तव में क्या करने की कोशिश कर रहे हैं?

+0

शायद वह इस धारणा के तहत है कि किसी को अजाक्स के अनुरोध को पूरा करने के लिए इंतजार करना होगा इससे पहले कि किसी को निकाल दिया जा सके? यदि ऐसा है, तो यदि कोई फ़ंक्शन 5 AJAX अनुरोधों को एक दूसरे के बाद आग लगा देता है, तो यह अनुरोध करने की प्रतीक्षा नहीं करेगा कि दूसरे को प्रोसेस करने से पहले वापस आएं।यह _exact_ पर एक ही समय में सभी 5 को आग नहीं करेगा, जैसा कि बताया गया है, लेकिन वे सभी एक दूसरे के कुछ मिलीसेकंड के भीतर चलेंगे, आमतौर पर –

+0

यह एक अच्छा जवाब है, लेकिन यह ध्यान देने योग्य है कि अधिकतर ब्राउज़र आपके अनुरोधों की संख्या को कैप करेंगे दो में भेज सकते हैं (हालांकि इसे ब्राउज़र सेटिंग्स में बदला जा सकता है), और बाकी कतारबद्ध करेंगे, इसलिए आप समांतर अनुरोध करने से महत्वपूर्ण गति प्राप्त नहीं कर पाएंगे। –

+0

@ डैन ओह मैं इसका मतलब था लेकिन भूल गया था। इसे लाने के लिए धन्यवाद। – cletus

3

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

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