2010-12-06 6 views
10

जेएस के साथ ऑनलाइन चैट लिखने के लिए सबसे अच्छा तरीका क्या होगा? अगर मैं AJAX का उपयोग करता हूं और प्रत्येक 5sec - HTTP अनुरोधों और उत्तरों के बारे में जानकारी अपडेट करता हूं और उत्तर बड़े ट्रैफिक बनाएंगे और अनुरोध उच्च सर्वर लोड करेंगे।PHP + JS + (MySQL?) + (AJAX?) के साथ तेज़, हल्के, आर्थिक ऑनलाइन चैट कैसे करें

लेकिन दूसरा कैसे? सॉकेट? लेकिन यह कैसे ..

उत्तर

8

आपको सर्वर लोड में कोई समस्या है, इसलिए मैं प्रासंगिक तकनीकों की तुलना करूंगा।

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

HTTP पुश यह विचार है कि सर्वर, ग्राहक जब वहाँ नए संदेश हैं बताना चाहिए बजाय ग्राहक लगातार सर्वर अगर कोई नए लोगों को अभी तक कर रहे हैं पूछ परेशान कर रहा है। माता-पिता ड्राइविंग और बच्चे से पूछें कि "क्या हम अभी तक हैं?", आप माता-पिता को वहां पहुंचने पर बच्चे को बता सकते हैं।

नकली दोनों के लिए कुछ तरीके हैं और इसे वास्तविक के लिए करते हैं। आपके द्वारा वर्णित वेबसाकेट, वास्तव में क्लाइंट और सर्वर के बीच एक स्ट्रीम बना रहे हैं और वास्तविक समय में डेटा भेज रहे हैं। यह कमाल है, और 10 में से 4 उपयोगकर्ताओं के लिए जिनके पास ऐसा ब्राउज़र हो सकता है, वे बहुत मनोनीत होंगे।हर किसी के पास एक टूटा पृष्ठ होगा। माफ़ कीजिये। शायद कुछ सालों में।

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

मैंने इन सभी का उपयोग पहले किया है, लेकिन लंबे मतदान के साथ जा रहा है। आप यहां वास्तव में इसे कैसे करें इसके बारे में अधिक जानकारी प्राप्त कर सकते हैं: How do I implement basic "Long Polling"?

+1

http://caniuse.com/#search=websocket, websockets IE8 और ie9 को छोड़कर प्रभावी ढंग से सबकुछ समर्थित हैं। : डी – Kzqai

1

कुछ तरीके हैं कि तुरंत ग्राहक को संदेश दे रहे हैं:

  • एचटीएमएल 5 WebSockets
    • अच्छा है क्योंकि आप उन्हें वास्तविक सॉकेट
    • बुरा है क्योंकि केवल एक तरह उपयोग कर सकते हैं कुछ ब्राउज़रों का समर्थन यह
  • अंतहीन लोडिंग फ्रेम
    • अच्छा हर ब्राउज़र इसका समर्थन करता है क्योंकि
    • इतना शांत है क्योंकि आप सामान
    • भेजने आप सामग्री
      • स्क्रिप्ट तुरंत मार डाला जाता है में <script> टैग एम्बेड करके ग्राहक को आदेश भेज सकते हैं के लिए AJAX अनुरोध करने की जरूरत नहीं, भी!
  • ...

तो, अंत में, मैं दूसरा रास्ता चुनते हैं।

+0

अनिश्चित क्या AJAX है, लेकिन इसके मुश्किल नहीं संदेश भेजने के लिए अन्य फ्रेम के अंदर नियमित रूप से उपयोग कर सर्वर के लिए। –

+0

@ user205376: अजाक्स भी आसान है, लेकिन एक सॉकेट कूलर है :) – thejh

+0

आप अधिक से अधिक संगतता प्राप्त करने के लिए वेबस्केट पर फ्लैश फ़ॉलबैक का उपयोग कर सकते हैं। उदाहरण के लिए देखें [gimite's one] (https://github.com/gimite/web-socket-js)। 2015 में – bobince

1

सामान्य दृष्टिकोण long polling का उपयोग करना है। हालांकि PHP में यह बेहतर नहीं है (PHP को प्रत्येक कनेक्शन के लिए एक प्रक्रिया की आवश्यकता होगी इस प्रकार आपकी साइट पर संभावित आगंतुकों की संख्या को सीमित रूप से सीमित कर देगा)। इसके बजाय node.js का उपयोग करें। यह चैट के लिए एकदम सही है।

2

आपको AJAX मतदान के बजाए सॉकेट चुनना चाहिए, हालांकि इस बारे में बहुत कुछ नहीं है कि आप MySQL के साथ सॉकेट आधारित चैट को एकीकृत कैसे कर सकते हैं।

मैं कुछ परीक्षण किया है और एक बुनियादी उदाहरण यहाँ काम किया है: https://github.com/andrefigueira/PHP-MySQL-Sockets-Chat

यह PHP में बातचीत सेवा के निर्माण के लिए Ratchet (http://socketo.me/) का इस्तेमाल करता है।

और तुम जो बातें है जानकारी के साथ सर्वर JSON भेजकर डीबी पर बातचीत संदेशो को भेज सकते हैं, (यदि निश्चित रूप से आप उपयोगकर्ता सत्र है)