संदर्भ: ओएस: लिनक्स (उबंटू), भाषा: सी (वास्तव में लुआ, लेकिन इससे कोई फर्क नहीं पड़ता)।अल्पकालिक प्रकाशक और दीर्घकालिक ग्राहकों के साथ PUB/SUB
मैं ज़ीरोएमक्यू-आधारित समाधान पसंद करूंगा, लेकिन पर्याप्त कुछ भी स्वीकार करूँगा।
नोट: तकनीकी कारणों से मैं यहां POSIX सिग्नल का उपयोग नहीं कर सकता।
मेरे पास एक मशीन ("श्रमिक") पर कई समान दीर्घकालिक प्रक्रियाएं हैं।
समय-समय पर मुझे कमांड लाइन उपकरण के माध्यम से प्रत्येक प्रक्रिया में एक नियंत्रण संदेश वितरित करने की आवश्यकता होती है। उदाहरण:
$ command-and-control worker-type run-collect-garbage
इस मशीन पर प्रत्येक श्रमिक को run-collect-garbage
संदेश प्राप्त होना चाहिए। नोट: यह सही होगा अगर समाधान किसी भी तरह क्लस्टर में सभी मशीनों पर सभी श्रमिकों के लिए काम करेगा, लेकिन मैं खुद ही वह हिस्सा लिख सकता हूं।
यदि मैं श्रमिकों के बारे में कुछ जानकारी संग्रहीत करता हूं तो यह आसानी से किया जाता है। उदाहरण के लिए पीआईडी को उनके लिए एक ज्ञात स्थान पर रखें और किसी भी पीआईडी के साथ ज्ञात पथ पर यूनिक्स डोमेन सॉकेट को नियंत्रित करें। या कहीं भी टीसीपी सॉकेट और स्टोर होस्ट और बंदरगाह खोलें।
लेकिन इसके लिए संग्रहीत जानकारी के सावधानीपूर्वक प्रबंधन की आवश्यकता होगी - उदा। क्या होगा अगर कार्यकर्ता की प्रक्रिया अचानक मर जाए? (कुछ भी अप्रबंधनीय नहीं है, लेकिन, अभी भी, अतिरिक्त झगड़ा।) इसके अलावा, जानकारी कहीं भी संग्रहीत करने की जरूरत है, इस प्रकार जटिलता का एक अतिरिक्त हिस्सा जोड़ना।
क्या PUB/SUB शैली में ऐसा करने का कोई अच्छा तरीका है? यही है, श्रमिक ग्राहक हैं, कमांड-एंड-कंट्रोल टूल एक प्रकाशक है, और वे सभी जानते हैं कि एक "चैनल यूआरएल" है, इसलिए कहने के लिए, संदेश पर आने के लिए।
अतिरिक्त आवश्यकताएं: नियंत्रण चैनल को
- संदेश सर्वेक्षण से श्रमिकों को जगाने चाहिए (का चयन करें, जो कुछ भी) पाश।
- संदेश डिलीवरी की गारंटी दी जा चाहिए, और यह प्रत्येक और हर कार्यकर्ता कि सुन रहा है तक पहुँचने चाहिए। आदर्श चुनाव/select/जो कुछ पाश ऊपर उल्लेख द्वारा -
- कार्यकर्ता को रोके बिना संदेशों के लिए नजर रखने के लिए एक तरह से होना चाहिए।
- आदर्श रूप से, कार्यकर्ता प्रक्रिया को एक अर्थ में "सर्वर" होना चाहिए - उसे "चैनल सर्वर" (यदि कोई हो) लगातार कनेक्शन से संबंध रखने के बारे में परेशान नहीं होना चाहिए - या यह ढांचे द्वारा पारदर्शी रूप से किया जाना चाहिए।
एक और संभवतः उपयोगी चीज जो मैंने पाया वह खोज करने पर मुझे यह प्रश्न मिला: http://code.google.com/p/ops/ - मैंने इसका उपयोग नहीं किया है, और इस प्रकार बात नहीं कर सकता इसके लिए, अगर आप किसी भी तरह से zmq की कमी महसूस करते हैं तो इसे एक टिप्पणी के रूप में जोड़ना। – lindes