2009-06-08 14 views
7

मैं XAJAX और PHP का उपयोग करके रीयल टाइम चैट कैसे लिख सकता हूं?मैं XAJAX और PHP का उपयोग करके रीयल टाइम चैट कैसे लिख सकता हूं?

दूसरे शब्दों में, क्या सर्वर से xajax प्रतिक्रियाओं को एकाधिक क्लाइंट में भेजने का कोई तरीका है? या ग्राहक पक्ष पर हर कुछ सेकंड नए संदेशों की जांच करने की एकमात्र संभावना है?

उत्तर

8

सं ग्राहकों चाहिए "चुनाव" सर्वर repeatadly है यही कारण है कि।

मुझे लगता है कि यहां कुंजी इंटरैक्शन डिज़ाइन सोचने के लिए है। यह चाल उपयोगकर्ता को यह सोचने के लिए मूर्ख बनाना है कि चैट तत्काल है, लेकिन जब वास्तव में यह प्रत्येक 1 या 2 या 3 या 10 सेकंड में एक बार अपडेट होता है।

विचार:

1) उपयोगकर्ता एक संदेश भेजता है, यह सीधे चैट में दिखाने के लिए और एक सर्वेक्षण ट्रिगर।

2) यदि कोई अन्य उपयोगकर्ताओं से कई संदेशों के साथ एक सर्वेक्षण वापस आ जाता है, तो उन्हें एक साथ सभी में शामिल न करें, वास्तव में उन्हें 1-2 सेकंड या उससे अधिक अवधि में याद रखें, यादृच्छिक रिक्ति के साथ, यह ऐसा दिखता है "तुरंत" और स्वतंत्र रूप से आ रहे हैं।(यदि संदेशों का एक गुच्छा एक बार में आता है तो उपयोगकर्ता को यह समझने में बहुत जल्दी लगता है कि चैट वहां और फिर अपडेट नहीं किया गया है।)

3) यदि उपयोगकर्ता x समय के लिए निष्क्रिय है। मतदान दर को हर 10sec या तो एक बार छोड़ दें।

4) यदि उपयोगकर्ता सक्रिय है, यानी बहुत सारे संदेश भेज रहे हैं, तो अधिक बार मतदान करें।

5) प्रत्येक चैनल के लिए एक स्थिर फ़ाइल है जिसे आपने पिछली बार चैट को अपडेट किया था। उदाहरण के लिए फ़ाइल chat-teenfun-lastupdate.txt में सामग्री 1224934239 या जो भी समय प्रारूप आप पसंद करते हैं। इस फ़ाइल को स्थैतिक रूप से सेवा दें और चैनल को यह जांचने के लिए क्लाइंट को इस फ़ाइल को मतदान करने दें कि chat-poll.php?ch=teenfun पर कॉल करने से गतिशील जांच हो। डायनामिक स्क्रिप्ट के लिए शामिल काम के आधार पर स्टेटिक फाइलें 10-100 गुना तेजी से सेवा दी जाती हैं, और जब आपको 250+ उपयोगकर्ता मतदान मिलते हैं तो आपको इसकी आवश्यकता होगी।

शुभकामनाएँ और मज़े करें!

/0

पी एस। वैकल्पिक रूप से आप वास्तव में सर्वर को सर्वर पर AJAX कॉल करने दे सकते हैं और उन्हें 'लटकाना' रख सकते हैं। क्या आप उनका अनुरोध स्वीकार करते हैं और डेटा वापस भेजने शुरू करने का नाटक करते हैं, लेकिन फिर आप रोकें। जब कुछ खुश होता है तो आप अनुमोदित डेटा के साथ प्रतिक्रिया समाप्त करते हैं। इसके लिए काम करने के लिए मेरा मानना ​​है कि आपको अपना स्वयं का HTTP-सर्वर लिखना होगा, हालांकि यह विशेष रूप से करता है, क्योंकि आपके पास स्मृति में चारों ओर लटकने वाली 250 PHP प्रक्रियाएं नहीं हो सकती हैं। हो सकता है कि लाइटटैड किसी भी तरह से उस LUA कैश मोड के साथ उपयोग किया जा सके। मुझे नहीं पता। हालांकि दिलचस्प होगा। नरक मुझे इसे कभी भी कोशिश करनी होगी :)

1

जब तक HTTP पुश तकनीक नहीं है तब तक आपको केवल JavaScript का उपयोग करके रीयलटाइम चैट नहीं मिलेगी।

संभव workarrounds:

  • एक Flash मूवी या एक Java एप्लेट का उपयोग कुछ सॉकेट संचार कुछ ही सेकंड
+1

क्या आप जानते हैं कि यहां PHP/JS में ऐसी चीजों के कुछ वास्तविक जीवन उदाहरण हैं? मैं अपने काम के लिए भी एक लिख रहा हूं, हां, इसकी सीमाएं हैं लेकिन यह असंभव नहीं है। पुश प्रौद्योगिकी के बिना भी। – elcuco

+0

रीयलटाइम मेरे लिए रीयलटाइम का मतलब है (कनेक्शन की गति को छोड़कर) ... लेकिन आप सही हैं: वास्तव में रीयलटाइम की तरह बहुत सारी चीज़ें ... – TheHippo

+0

मेरा मानना ​​है कि बाद वाला दृष्टिकोण फेसबुक मैसेंजर का उपयोग करता है।यह एक पारंपरिक क्लाइंट-सर्वर दृष्टिकोण के रूप में सुरुचिपूर्ण नहीं है, शायद, लेकिन यह काम पूरा हो जाता है। – Rob

6

ज़रूर है के लिए सर्वर साइड पर वापस

  • पकड़ मतदान अनुरोध पर कार्रवाई करने , लेकिन मुझे नहीं लगता कि यह कई उपयोगकर्ताओं के साथ बहुत ही कुशल होगा। आप या तो मतदान कर सकते हैं जहां प्रत्येक क्लाइंट सर्वर को यह देखने के लिए मतदान करता है कि कोई नया संदेश है या आप comet technique का उपयोग कर सकते हैं जिसमें सर्वर ग्राहकों को नए संदेश धक्का दे सकता है - Comet plugin for XAJAX देखें। XAJAX और PHP का उपयोग करके इसे कैसे कार्यान्वित किया जाएगा, यह मेरे बाहर है, लेकिन यहां मैं इसे कार्यान्वित करने का प्रयास कैसे करूंगा।

    प्रत्येक क्लाइंट (प्रवेश आदि) सर्वर से कनेक्ट है, तो दो:

    1. एक ग्राहक (प्रेषक) द्वारा भेजे गए प्रत्येक संदेश के लिए ग्राहक के लिए संदेश कतार अद्यतन (रिसीवर)
    2. चलो ग्राहक सर्वेक्षण सर्वर कतार में नए संदेशों के लिए/धूमकेतु के माध्यम से नए संदेश पुश करें।
    3. नए संदेश होने पर जीयूआई अपडेट करें।
    4. रिंस, साबुन का झाग, दोहराने

    ejabberd की तरह एक सच्चे आईएम सर्वर का उपयोग करते हुए एक लंबा रास्ता तय कर सकता है, और अधिक कुशल हो और अपने उपयोगकर्ताओं को डेस्कटॉप क्लाइंट के माध्यम से कनेक्ट करने की अनुमति (अगर है कि तुम क्या चाहते हो)। मैं शायद इसे बैकएंड के रूप में उपयोग करूँगा, IOW ejabberd सर्वर होगा और PHP XMPP in PHP का उपयोग कर क्लाइंट होगा, और वेबगुई के लिए प्रॉक्सी के रूप में कार्य करेगा।

    यह भी देखें:
    Google Techtalk on Gmail's chat feature (and scalability issues)

    मेरी $ 0.02

  • 0

    मैंने देखा है कि सबसे अच्छी रणनीति संदेश के लिए AJAX अनुरोध करना है और फिर इसे ठीक उसी अनुरोध को फिर से शुरू करना है।

    सर्वर की ओर, 60 सेकंड के लिए स्क्रिप्ट "स्टॉल" बनाएं या जब तक कोई नया संदेश प्राप्त न हो जाए। यह अधिकतम 60 सेकंड के लिए एक ही कनेक्शन खुला रहता है, लेकिन जब कोई नया संदेश प्राप्त होता है, तो यह इसे आउटपुट करता है और तुरंत बंद हो जाता है, जिससे क्लाइंट-साइड AJAX को एक और कनेक्शन खोलने के लिए संकेत मिलता है।

    यह नए संदेशों की लगभग तत्काल अधिसूचना प्रदान करता है और हर एक्स सेकंड में नया कनेक्शन बनाने से सर्वर पर भी अधिक आसान होता है।

    1

    आप websockets का उपयोग कर सकते हैं, लेकिन एक नई HTML5 सुविधा होने के नाते यह थोड़े सीमित है। आपके लिए भाग्यशाली socksjs है, जो ब्राउज़र पर websockets लागू करता है जो इसे संभाल नहीं करता है।

    होस्टिंग पक्ष पर आप किसी भी websockets सर्वर का उपयोग करने में सक्षम होना चाहिए, PHP के लिए कुछ हैं।

    +0

    सचमुच कोई बड़ा ब्राउज़र नहीं है जो websockets का समर्थन नहीं करता है: http://caniuse.com/#feat=websockets – specializt

    1

    यदि आप PHP/JSP जैसे स्क्रिप्टिंग भाषा के साथ लिखे गए चैट सर्वर को कार्यान्वित करना चाहते हैं, तो HTTP कनेक्शन लटकाने की तकनीक को आपकी अपनी पसंद सूची से अलग करना होगा। कारण अधिकांश वेब सेवर्स (विशेष रूप से साझा मेजबान) को लटकने वाले बहुत से कनेक्शन पसंद नहीं हैं।

    आप इस "Optimized Chat Server Protocol for Server Side Scripting Languages" प्रकाशन में वेब क्लाइंट और PHP चैट सर्वर को लागू करने के लिए आवश्यक सभी चीज़ें पा सकते हैं।