2016-10-18 12 views
6

उद्देश्य

मेरे मूल उद्देश्य की तरह प्रतिक्रिया गैर अवरोधित करना मोड का इंतजार किए बिना पृष्ठभूमि नौकरियों चल रहा है मैं php बैच नौकरियों चलाने की आवश्यकता है लेकिन मैं Yii2 वेब अनुप्रयोगपीएचपी उत्प्रेरक प्रकार

का उपयोग कर PHP में asynchornous चलाता हासिल करने के लिए है नौकरी करने के लिए ब्राउज़र/क्रॉन में प्रतीक्षा नहीं करना चाहते हैं। काम मैं की तरह

http://myapp/foojob.php 

foojob.php अपने आवेदन के विभिन्न फ़ाइल का उपयोग करने एसिंक्रोनस रूप से कई php उदाहरणों फोन किया जाना चाहिए की जरूरत है चल के लिए हाथ में उपलब्ध नौकरियों के आधार पर [प्रत्येक उदाहरण के एक ही काम किया जाता है]। कॉल की समय सीमा (foojob.php) 60sec.i से कम है, यह समय-समय पर मूल्य से अधिक होने से पहले नए PHP उदाहरणों को ट्रिगर करने की आवश्यकता है।

मैं & की कोशिश की

  1. curl_multi भेजा - मैं could't उस में गैर अवरुद्ध मोड पाते हैं।
  2. fsock_open - यह कनेक्शन भेजकर संभव है: कॉल के करीब (लेकिन fsock open हमेशा साझा किए गए होस्टिंग सर्वर पर उपलब्ध नहीं है या यह ठीक से काम नहीं कर रहा है)। क्या आप मुझे fsock परिवहन के साथ कोई विश्वसनीय समाधान सुझा सकते हैं?
  3. pcntl_exec-मैंने वास्तविक समय में कोशिश नहीं की है लेकिन रीयलटाइम आंकड़े बताते हैं कि 45% सर्वर ने फ़ंक्शन को अक्षम कर दिया है। मैं कारण क्यों नहीं जानता।
  4. स्ट्रीम ट्रांसपोर्ट - मुझे नहीं पता कि यह कैसे काम करता है?

मेरे सवाल:

  1. गैर अवरुद्ध async अनुरोध करता वहाँ किसी भी संभव समाधान है कि पहले से ही Git में मौजूद है PHP में हासिल करने के लिए है?
  2. मुझे बताएं कि क्या कोई अन्य ट्रांसपोर्ट मुझे
  3. पर देखने की आवश्यकता है पर्यावरण पर आधारित कोई स्मार्ट स्विचिंग परिवहन तंत्र (कर्ल/एफएसॉक) है?

संपादित करें:

आवेदन स्वयं के द्वारा होस्ट उत्पाद है। यह विभिन्न होस्टिंग सेवाओं पर काम करेगा। साझा होस्टिंग आपके ग्राहक के लिए किसी बाहरी एक्सटेंशन को अनुमति/प्रदान नहीं करेगा।

+0

आप [php-बचाव] पर एक नज़र था मदद करता है (https://github.com/chrisboulton/php-resque)? –

+0

@old_mountain धन्यवाद। मैंने एक नज़र डाली है इसे रेडिस रेडिस 2.2+ की आवश्यकता है। हमारे मामले के लिए किसी भी कठोर निर्भरता के बिना बेहतर होगा? – Babu

+0

क्या आपने 'ignore_user_abort()' जांच की थी? इसके साथ आप 'नोहुप' का उपयोग कर सकते हैं यदि आपके पास यह काम करने के लिए यूनिक्स बॉक्स हैं। – Gogol

उत्तर

0

मैं गैर अवरुद्ध पृष्ठभूमि नौकरियों के लिए एक php पुस्तकालय लिखा है। यह होगा लाइब्रेरी उद्देश्य मैं पोस्ट

प्राप्त करने के लिए संगीतकार लाइब्रेरी https://packagist.org/packages/devbabuind/non-blocking-php

1

आप एक ऐसा दृष्टिकोण ले सकते हैं जहां आप ब्राउज़र को कनेक्शन बंद करने के लिए सही शीर्षलेख भेजते हैं और फिर प्रक्रिया को समकालिक रूप से चलाते हैं और यह अंतिम उपयोगकर्ता को एसिंक दिखाई देगा।

यहां कुछ ऐसा है जो मैंने बहुत समय पहले लिखा था कि आप एक उदाहरण के रूप में देख सकते हैं। http://www.phpclasses.org/package/8388-PHP-Defer-execution-of-actions-until-the-script-ends.html

मुझे लगता है कि वाईआई में कुछ जगह है जिसे आप सामग्री के भेजने के बाद हुक कर सकते हैं जहां आप एक जैसी चीज कर सकते हैं।

इसका संक्षिप्त संस्करण शीर्षलेख ("सामग्री-लंबाई:"।$ लंबाई); शीर्षलेख ("कनेक्शन: बंद करें");

ob_flush(); // headers 
echo $html; 
flush(); 

doWork(); 
+0

उत्तर के लिए धन्यवाद। सॉकेट और कमांड में कुछ गैर अवरुद्ध PHP अवधारणाएं हैं। यह उपयोगी है और मैं यहां कुछ गैर अवरुद्ध php विधियों के साथ अपना स्वयं का उत्तर लिखता हूं। – Babu

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