2009-03-18 16 views
10

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

मेरे स्वयं के परीक्षण साझा करने के लिए mysql डेटाबेस साझा किए गए हैं, उन्हें एक कार्यकर्ता को लॉक करें, और उन्हें पूरा करें (डीबी में वापसी डेटा को सहेजना) के रूप में चिह्नित करें। यह सिर्फ एक गन्दा प्रोटोटाइप था, और पूरे समय मुझे लगा जैसे मैं पहिया को पुनर्निर्मित कर रहा था (और बहुत सुंदर नहीं)। क्या php में कुछ मौजूद है (या मैं वास्तव में बात कर सकता हूं?) कि मैं इसका उपयोग कर सकता हूं?

कुछ और पढ़ने के आसपास, मैंने पाया है कि जो मैं खोज रहा हूं वह एक क्यूइंग सिस्टम है जिसमें एक PHP एपीआई है, इसे php में लिखा जाना आवश्यक नहीं है। मुझे केवल अमेज़ॅन के एसक्यूएस के साथ उपयोग के लिए कक्षाएं मिली हैं, लेकिन न केवल यह मुफ़्त है, यह कभी-कभी काफी गुप्त है (संदेश दिखाने के लिए एक मिनट से अधिक)।

उत्तर

5

क्या आपने ActiveMQ को आजमाया है? यह Stomp प्रोटोकॉल के माध्यम से PHP का समर्थन करने का उल्लेख करता है। विवरण the activemq site पर उपलब्ध हैं।

मुझे आपके वर्णन के डेटाबेस दृष्टिकोण से बहुत अधिक लाभ मिला है, इसलिए मैं इसके बारे में ज्यादा चिंता नहीं करता।

3

क्या आपके पास सर्वर पर पूर्ण नियंत्रण है?

MySQL कतार ऐसे मामले में ठीक हो सकती है। एक PHP स्क्रिप्ट है जो लगातार चल रही है (लूप के अंत में), निष्क्रिय समय में लोड को कम करने के लिए नए "कार्यों" और नींद() के लिए MySQL डेटाबेस से पूछताछ करना।

जब प्रत्येक कार्य पूरा हो जाता है, तो इसे डेटाबेस में चिह्नित करें और अगले स्थान पर जाएं।

कि पूरी बात करना बंद कर दे अपनी स्क्रिप्ट दुर्घटनाओं/मौजूद है (पीएचपी स्मृति अतिप्रवाह, आदि) आप, उदाहरण के लिए, यह inittab में जगह कर सकते हैं (यदि आप एक सर्वर के रूप में लिनक्स का उपयोग करें) और init स्वचालित रूप से इसे पुनः आरंभ करेगा रोकने के लिए।

+1

मुझे इनिटैब दृष्टिकोण पसंद है - php समय के साथ स्मृति को रिसाव करता है इसलिए एक बार एक बार मरने के बाद यह एक बुरा विचार नहीं हो सकता है – reconbot

+0

मैं एक शेल स्क्रिप्ट का उपयोग करता हूं जो अंत में फिर से चलाने के लिए 'exec $ 0' करता है । ग्राहक इच्छा पर बाहर निकल सकता है और पुनरारंभ किया जा सकता है। –

2

ज़ेंड_फ्रेमवर्क में क्यूई क्लास है, जिसमें माइस्क्ल-समर्थित, एसक्यूएस और कुछ अन्य बैक-सिरों के कई कार्यान्वयन हैं।

व्यक्तिगत रूप से, मेरे पास हाल ही में BeanstalkD के साथ उत्कृष्ट परिणाम हुए हैं, जिनमें एक PHP क्लाइंट भी है। मैं बस जेएसओएन के साथ कुछ डेटा को फेंकने के लिए सीरियलाइज कर रहा हूं, जो कि कार्यकर्ताओं पर डीकोड और रन हो जाता है।

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