2009-03-24 13 views
11

मैं अपनी वेबसाइट के लिए एक मूल छोटा AJAX shoutbox/चैट बना रहा हूं, लेकिन मुझे यकीन नहीं है कि सर्वर मतदान को कैसे कार्यान्वित किया जाए।जावास्क्रिप्ट चैट क्लाइंट के लिए सर्वर मतदान अंतराल

यहाँ बुनियादी कार्यक्रम प्रवाह मैं सोच रहा हूँ है:

  1. उपयोगकर्ता पृष्ठ पर आता है और, ग्राहक जावास्क्रिप्ट के साथ कोई URL अनुरोध करेंगे पिछले 10 संदेशों
  2. दूसरों के द्वारा भेजे गए संदेशों को प्राप्त करने के लिए दिखाया गया है एक टाइमस्टैम्प पैरामीटर (ग्राहक द्वारा प्राप्त अंतिम संदेश के मूल्य पर सेट)
  3. सर्वर उस टाइमस्टैम्प के बाद से सभी संदेशों (अधिकतम 10 तक) देता है।

एकमात्र मुद्दा यह है कि सर्वर को कितनी बार मतदान करना है। स्पष्ट रूप से इसे प्रत्येक बार एक नया संदेश जोड़ा जाने पर मतदान करना चाहिए, लेकिन जब आप केवल दूसरों के संदेशों को पढ़ रहे हों तो इसे स्वचालित रूप से अपडेट करने की आवश्यकता है।

क्या यह निर्धारित समय सीमा होनी चाहिए? उदाहरण: हर 10 सेकंड। या, क्या उपयोग के आधार पर यह अलग-अलग होना चाहिए? उदाहरण: 5 सेकंड के बाद जांचें। अगर कोई संदेश नहीं है, तो किसी और 10 सेकंड की जांच न करें। यदि अभी भी कोई नया संदेश नहीं है, तो 15 सेकंड में चेक करें, फिर 20, अधिकतम 30 सेकंड अधिकतम हो सकता है। प्रत्येक बार जब कोई नया संदेश पता चला है तो अपने टाइमर को 5 सेकंड तक रीसेट कर दें और फिर से शुरू करें।

मैं सर्वर पर अनावश्यक तनाव डालने के बारे में चिंतित हूं, इस पर विचार करते हुए कि हमारे पास सैकड़ों उपयोगकर्ता एक साथ ऑनलाइन हो सकते हैं।

... या क्या मुझे पूरी चीज़ गलत है? मूल जावास्क्रिप्ट चैट को लागू करने का कोई बेहतर तरीका है?

उत्तर

4

ब्रायन द्वारा वर्णित धूमकेतु एक अच्छी तकनीक है, लेकिन सर्वर पर सत्र समर्थन की आवश्यकता है, जो कि एक साधारण चैट बॉक्स के लिए लागू करने की आपकी अपेक्षा से अधिक उन्नत है।

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

मान लीजिए कि आपको रीयल-टाइम टाइपिंग करने की आवश्यकता नहीं है, तो आप शायद हर 3 सेकंड में मतदान कर सकते हैं या जब चरम गतिविधि पर, और यदि 5-10 चुनावों के लिए कुछ भी दिखाई नहीं देता है, तो अंतराल को क्रैंक करना शुरू करें (शायद इसे हर बार दोगुना करना) जब तक यह 30-60 सेकंड तक नहीं पहुंच जाता। एक संदेश वापस प्राप्त करना कुछ अंतराल पर मतदान अंतराल को रीसेट करना चाहिए, जबकि संदेश भेजने के तुरंत बाद मतदान करना चाहिए, लेकिन संभवतः मतदान की आवृत्ति को अन्यथा प्रभावित करने की आवश्यकता नहीं है।

+0

यही वही है जो पूछताछ के रूप में उल्लिखित है। क्या आपने पूरा सवाल पढ़ा? –

+0

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

0

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

+0

हालांकि सैकड़ों लोग हो सकते हैं। और क्या यह आवश्यक नहीं होगा कि प्रत्येक ग्राहक एक अनुरोध भेजता है जब उपयोगकर्ता टाइपिंग शुरू करता है और साथ ही जब वे रुकते हैं? – nickf

+0

यह सच है, हालांकि AJAX में AJAX XMLHTTPRequest ऑब्जेक्ट के लिए डिज़ाइन किया गया था। – Suroot

+0

यहां दोहरी पोस्ट के लिए खेद है लेकिन यह जानकारी वहां रखना चाहती है: http://en.wikipedia.org/wiki/Comet_(programming)#XMLHttpRequest – Suroot

5

क्लाइंट सर्वेक्षण सर्वर होने के बजाय, आप अपने उपयोगकर्ताओं को जानकारी स्ट्रीम करने के लिए Comet प्रोग्रामिंग तकनीकों के रूप में जाना जाता है। यह वास्तव में तकनीकों का एक परिवार है, जिनमें से कुछ परिस्थितियों के आधार पर दूसरों की तुलना में बेहतर काम कर सकते हैं, जैसे आप किस प्रकार का सर्वर उपयोग कर रहे हैं और आपको किस प्रकार की ग्राहक अनुकूलता की आवश्यकता है।

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

0

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

आप अन्य उपयोगकर्ता के प्रतिक्रिया समय के कार्य के रूप में उपयोगकर्ता को मतदान अंतराल भेज सकते हैं। मुझे लगता है कि यह गतिशील गति का सबसे अच्छा तरीका है।

+0

हाँ मैंने सोचा - मुझे लगा कि मैं नवीनतम 10 वापस कर दूंगा दिए गए टाइमस्टैम्प के बाद से संदेश, इसलिए यदि कोई इसे "0" में बदल देता है, तो उन्हें केवल अंतिम 10 संदेश मिलेंगे। – nickf

+0

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

3

ईमानदारी से, अगर आप एक को लागू कर रहे हैं overkill Jabber, Comet आदि की तरह "बुनियादी थोड़ा AJAX shoutbox/चैट", बातें कर रहे हैं आप के लिए। ऐप सर्वर और डीबी के भार को लेने के लिए इन चीजों के लिए आपको अतिरिक्त सर्वर/प्रॉक्सी चलाने की आवश्यकता होगी।
जब आप presence management ("जो टाइपिंग ...") जैसी चीजों के बारे में सोचते हैं, तो चीजें आपके ऐप के लिए अत्यधिक जटिल होती हैं ("चैट" पर आपका मुख्य ध्यान नहीं है)।
Meebo और Userplane जैसे प्रदाताओं से विजेट जोड़ने के बारे में सोचें। एक बार जब आप जैबर और इसके बारे में सोचते हैं ...

+0

वास्तव में यह वास्तव में सबसे बुनियादी कार्यक्षमता माना जाता है – nickf

0

http://jabbify.com/home/comet_service यह जेएमवीसी फ्रेमवर्क करने वाले लोगों द्वारा निःशुल्क धूमकेतु आधारित चैट सेवा है। अभी तक कोशिश नहीं की है, लेकिन आशाजनक लग रहा है।

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