2013-03-15 2 views
6

मैं वर्तमान में अपने डेटाबेस के लिए mysqldb का उपयोग कर रहा हूं, और मुझे रीयल-टाइम में एक मैसेजिंग सुविधा को एकीकृत करने की आवश्यकता है। chat demo कि तूफान एक डेटाबेस को लागू नहीं है प्रदान करता है,डेटाबेस में रीयल-टाइम चैट संदेश कैसे स्टोर करें?

यह संदेश सेवा भी भी (यदि आप Facebook की संदेश सेवा काम करता है की तरह भविष्य में एक ईमेल के रूप में दोहरा होगा। चैट मंच (जबकि blog। करता है) यह भी ईमेल है।) भले ही, मैं यह सुनिश्चित करना चाहता हूं कि मेरा वर्तमान, पहला चैट संस्करण ईमेल के रूप में कार्य करने के लिए विस्तारित किया जा सकेगा, और कुल मिलाकर, मुझे डेटाबेस में संदेशों को संग्रहीत करने की आवश्यकता है।

इस तरह कुछ आसान है: भेजे गए प्रत्येक चैट संदेश के लिए, डेटाबेस से पूछताछ करें और उपयोगकर्ताओं की स्क्रीन पर संदेश प्रदर्शित करें। या, क्या यह विधि उच्च सर्वर लोड और खराब अनुकूलन से पीड़ित है? इस काम को करने के लिए मुझे "आधारभूत संरचना" को कैसे व्यवस्थित करना चाहिए?

(मैं इस सवाल में निहित आत्मीयता से कुछ के लिए माफी माँगता हूँ, लेकिन, मैं "एक बार दो बार मापने, कोड।" करने के लिए पसंद करते हैं)

इनपुट, उदाहरण और संसाधनों की सराहना की।
सम्मान।

उत्तर

12

टोरनाडो एक एकल थ्रेडेड गैर अवरोधक सर्वर है।

इसका क्या अर्थ है कि यदि आप मुख्य धागे पर कोई अवरुद्ध कॉल करते हैं तो आप अंततः प्रदर्शन को मार देंगे। आप इसे पहले नोटिस नहीं कर सकते क्योंकि प्रत्येक डेटाबेस कॉल केवल 20ms के लिए अवरुद्ध हो सकती है। लेकिन एक बार जब आप प्रति सेकंड 200 से अधिक डेटाबेस कॉल कर रहे हैं तो आपका एप्लिकेशन प्रभावी रूप से लॉक हो जाएगा।

हालांकि यह कुछ डीबी कॉल है। आपके मामले में 200 लोग एक ही सेकंड में अपने चैट संदेश पर भेज देंगे।

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

जब कोई चैट सत्र से कनेक्ट होता है तो आपको सभी पिछले संदेशों के लिए कतार में भी अनुरोध भेजने की आवश्यकता होती है, जब कतार प्रतिक्रिया देता है कि आप उन्हें नए कनेक्टेड उपयोगकर्ता को भेज दें।

इस तरह मैं वैसे भी समस्या से संपर्क करूंगा।

भी इस सवाल का जवाब देने के देख सकते हैं और: Any suggestion for using non-blocking MySQL api on Tornado in Python3?

बस इतना याद रखें तूफान एकल लड़ी है। यह आश्चर्यजनक है। और हजारों एक साथ कनेक्शन संभाल सकते हैं। लेकिन यदि उन कनेक्शनों में से एक कोड 1 सेकंड के लिए ब्लॉक करता है तो कुछ भी अन्य उस कनेक्शन के दौरान किसी अन्य कनेक्शन के लिए नहीं किया जाएगा।

+0

वाह यह एक अच्छा जवाब है, इस पर आपकी सहायता के लिए धन्यवाद। यह सही समझ में आता है और शुरू करने के लिए एक महान जगह है। – JohnZ

+3

क्या आप बता सकते हैं कि मैंने पहले उत्पादन उत्पादन में टॉरनाडो लूप पर अवरुद्ध कॉल का उपयोग किया है? :) – aychedee

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