Redis#subscribe
का कार्यान्वयन एक लूप है जो घटनाओं को सुनने के लिए वर्तमान धागे का नियंत्रण ग्रहण करेगा। इसका मतलब है कि आपके द्वारा दिखाए गए तरीके से रेल वर्ग के संदर्भ में सदस्यता छोड़ते समय बूट प्रक्रिया रोक दी जाती है।
आप कॉल को थ्रेड में लपेटने का प्रयास कर सकते हैं, लेकिन जब भी यह वर्ग एक नई प्रक्रिया में लोड होता है, जैसे रेल कंसोल या एकाधिक यूनिकॉर्न, तो यह दृष्टिकोण सचमुच एक नई सदस्यता तैयार करेगा। साथ ही, आपको साझा स्थिति और अन्य थ्रेडिंग मुद्दों के बारे में सावधान रहना होगा। शायद यही वह नहीं है जो आप चाहते हैं।
आप एक अलग प्रक्रिया शुरू करने के लिए सबसे अच्छे हैं जो रेल पर्यावरण को लोड करता है और वेब अनुरोधों की सेवा करने वाली प्रक्रिया से अलग रेडिस की सदस्यता लेता है। यह निम्न की तरह एक रेक कार्य हो सकता है:
namespace :subscribe do
task :redis => :environment do
$redis.subscribe("bravo") do |on|
on.message do |channel, message|
Rails.logger.info("Broadcast on channel #{channel}: #{message}")
OtherClass.some_method # yada yada
end
end
end
end