7

मैं एक मैसेजिंग ऐप पर काम कर रहा हूं और मुझे सर्वर से क्लाइंट को डेटा भेजने के तरीके के बारे में एक दुविधा है।क्या सर्वर-टू-क्लाइंट मैसेजिंग एपीएनएस पर भरोसा कर सकता है?

मैं एक केंद्रीकृत सर्वर डिज़ाइन का उपयोग कर रहा हूं, जहां सर्वर सर्वर पर संदेश भेजने के लिए NSURLConnection का उपयोग करता है, सर्वर खुले सॉकेट को नहीं रखता और प्रबंधित नहीं करता है और ग्राहकों में से किसी एक के लिए संदेश नहीं भेज सकता है। तो ग्राहक एक टाइमर का उपयोग करते हैं और प्रत्येक 2 सेकंड में सर्वर से पूछताछ करते हैं कि नया डेटा उनके लिए इंतजार कर रहा है या नहीं।

इस दृष्टिकोण के साथ समस्या यह है कि पोलिंग सर्वर हर 2 दूसरी बैटरी बहुत तेजी से मारने के लिए लग रहे है, इसलिए मैं ग्राहकों पोलिंग सर्वर के बजाय हो सकता है सोचा, उपयोग APNS को * इसलिए जब सर्वर कुछ नई क्लाइंट के लिए जानकारी **, सर्वर धक्का अधिसूचना* ** क्लाइंट को भेजेगा, तो क्लाइंट सर्वर से डेटा लाएगा।

* एपीएनएस का उपयोग करें - यदि ग्राहक इसे अनुमति देता है, तो क्लाइंट इस विकल्प को अक्षम कर सकता है। तो मैं जांच करूंगा कि ऐप हर बार ऐप फोरग्राउंड में प्रवेश करने की अनुमति देता है और यदि नहीं, तो मैं मतदान दृष्टिकोण पर वापस आऊंगा।

** नई जानकारी टेक्स्ट संदेशों से सर्वर व्यवस्थापक संदेशों में कुछ भी हो सकती है। (और बहुत से व्यवस्थापक संदेश हैं ...)
उदाहरण के लिए, मेरे ऐप उपयोगकर्ता में अपने दोस्तों की स्थिति (ऑनलाइन/ऑफ़लाइन) देख सकते हैं, इसलिए यदि उपयोगकर्ता 1 और उपयोगकर्ता 2 मित्र हैं, और उपयोगकर्ता 2 ऑनलाइन से अपनी स्थिति बदलते हैं ऑफ़लाइन, तो सर्वर को उपयोगकर्ता को यह नई जानकारी (व्यवस्थापक संदेश = user2_offline) भेजने की आवश्यकता है।

***पुश नोटिफिकेशन के सर्वर भेजता खाली हैं (कोई डेटा/ध्वनि के साथ), यह सिर्फ एक ट्रिगर है ग्राहक, नई जानकारी लाने के लिए के लिए ऐसा करता है, तो एक धक्का ग्राहक को भेजा गया था और ग्राहक ऐप करीब था, वह कुछ भी नहीं देखेगा। (यदि ऐप चल रहा है, तो यह सर्वर से नई जानकारी प्राप्त करेगा)

क्या यह दृष्टिकोण बड़े पैमाने पर पुष्ट अधिसूचना के उपयोग के लिए एक विशाल संदेश एप्लिकेशन के साथ काम करेगा?

स्पष्ट होना करने के लिए अपने मुख्य चिंताएं हैं:
1. APNS काफी विश्वसनीय है कि मैं अपने मूल सर्वर से ग्राहक मैसेजिंग तंत्र के रूप में उपयोग कर सकते हैं?
2. क्या सेब संभावित रूप से हजारों या सैकड़ों हजारों को मेरे सर्वर से अधिसूचनाओं को पुश करेगा?

+0

SocketIO (लंबी मतदान) पर एक नज़र डालें के लिए सर्वेक्षण में शामिल नहीं किया है के निर्माण से पहले आप मतदान तंत्र के मालिक हैं। – Till

उत्तर

-1

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

  1. एपीएन विश्वसनीय नहीं हैं, वे ग्राहक तक पहुंचने के लिए 100% गारंटी नहीं हैं।
  2. ऐप्पल के दस्तावेज के रूप में, एपीएन सर्वोत्तम प्रयास, कई बार वे नहीं पहुंच सकते हैं।
  3. एपीएन उनके अंदर डेटा नहीं रखते हैं, इसलिए यदि वे आपके क्लाइंट ऐप तक पहुंचते हैं तो भी वे ऐप के लिए उनके अंदर कुछ भी नहीं रखते हैं।
  4. एपीएन उपयोगकर्ता के लिए सिर्फ सूचनाएं हैं कि आपके ऐप से संबंधित कुछ ऐसा हुआ है, जबकि संदेश (एपीएन के अलर्ट बॉक्स में दिखाई देने वाला टेक्स्ट) आईओएस द्वारा संभाला जाता है, न कि आपके ऐप। यही कारण है कि आईओएस 4 के साथ डिवाइस आईओएस 5 के साथ उपकरणों की तुलना में एपीएन को अलग तरीके से प्रदर्शित करेंगे, यह ओएस जॉब आपके ऐप नहीं है।
  5. नोटिफिकेशन आने पर आपके ऐप आइकन पर दिखाई देने वाला बैज मान आपके सर्वर की ज़िम्मेदारी है, न कि डिवाइस ओएस। अलग-अलग रखें, जब एक एपीएन डिवाइस तक पहुंच जाता है तो उसे आपके ऐप के लिए नई अधिसूचना गणना मान आनी चाहिए। ओएस इसके लिए कुछ भी नहीं करेगा।

यह कहकर कि मैं थोड़ा सा समझाऊंगा कि आमतौर पर ऐसे एप्लिकेशन कैसे डिज़ाइन किए जाते हैं। सबसे पहले, यह यूआरएल कनेक्शन द्वारा नहीं किया जाता है और ग्राहक हर समय सर्वर की जांच नहीं करते हैं। आमतौर पर आपके पास क्लाइंट/सर्वर आर्किटेक्चर होता है जहां आपका क्लाइंट डिवाइस पर ऐप होता है और सर्वर एक वास्तविक सर्वर प्रोग्राम होता है जो सर्वर मशीन पर रहता है। सर्वर माइक्रोसॉफ्ट (उदाहरण के लिए सी # का उपयोग कर) या मैक (उद्देश्य सी का उपयोग कर) हो सकता है। सर्वर में एक डेटाबेस है जो इसके अंदर जानकारी संग्रहीत करता है। कुछ महत्वपूर्ण जानकारी (आपके प्रश्न से संबंधित) एपीएन गणना मूल्य, वह संदेश है जिसे आप वितरित करना चाहते हैं, क्लाइंट की स्थिति ऑनलाइन या ऑफलाइन होने पर।

जब कोई ग्राहक किसी अन्य ग्राहक को कुछ भेजना पसंद करता है, या जब सर्वर किसी क्लाइंट (या सभी क्लाइंट) को कुछ भेजना चाहता है, तो प्राप्तकर्ता क्लाइंट को यह जांचने के लिए चेक किया जाता है कि वह ऑनलाइन है या ऑफ़लाइन है या नहीं। यदि वह ऑनलाइन है तो संदेश सीधे भेजा जाता है, और आमतौर पर संचार टीसीपी सॉकेट पर किया जाता है। यदि उपयोगकर्ता ऑफ़लाइन है तो सर्वर उस संदेश को संग्रहीत करेगा जिसे क्लाइंट को भेजा जाना चाहिए, एपीएन गणना मान बढ़ाएं, उस प्राप्तकर्ता को एपीएन भेजें। जब वह प्राप्तकर्ता ऑनलाइन हो जाता है, तो सर्वर ध्यान देगा कि (क्योंकि कनेक्शन और हैंडशेकिंग स्थापित है) और इसलिए डेटाबेस से सभी अविश्वसनीय संदेशों को लाएगा और उन्हें उन्हें भेज देगा ...

यह एक लंबी प्रक्रिया है, मुझे उम्मीद है मैं आपको कुछ चीजों को समझाने में सक्षम था। सभी मामलों में मुझे नहीं लगता कि आपका तरीका व्यावहारिक है या आपको वास्तविक काम तक पहुंचने में सक्षम बनाता है।

+0

सॉकेट का उपयोग कर क्लाइंट/सर्वर से शुरू करने में रुचि रखने पर, आपको [यहां] से पढ़ने शुरू करना पड़ सकता है (http://stackoverflow.com/questions/10823544/iphone-communication-using-sockets/10824560#10824560) – antf

+2

"एपीएन में उनके अंदर डेटा नहीं है, इसलिए यदि वे आपके क्लाइंट ऐप तक पहुंचते हैं तो भी वे ऐप के लिए उनके अंदर कुछ भी नहीं रखते हैं।" यह सही नहीं है - आप अपना खुद का पेलोड डाल सकते हैं (हालांकि एपीएन के कुल आकार की सीमा है) – Gruntcakes

+0

आपके उत्तर के लिए पहला धन्यवाद लेकिन मुझे लगता है कि कुछ गलतफहमी हैं ... एपीएनएस तथ्यों के बारे में: (1,2) मुझे पता है कि एपीएनएस सबसे अच्छा प्रयास है, सर्वर जांच सकता है कि क्लाइंट को धक्का मिला है और यदि नहीं तो वह इसे फिर से भेज देगा। (3) यह सही नहीं है, मैं इसके साथ पेलोड भेज सकता हूं, लेकिन यह मेरा उद्देश्य नहीं है, जैसा कि मैंने लिखा था: "धक्का अधिसूचना सर्वर भेजता है खाली (कोई डेटा/ध्वनि नहीं), यह क्लाइंट के लिए केवल एक ट्रिगर है नई जानकारी "(4,5) मुझे पता है लेकिन मेरी जरूरतों के लिए प्रासंगिक नहीं है .. – Eyal

0

क्या एपीएनएस विश्वसनीय है कि मैं इसे अपने कोर सर्वर-टू-क्लाइंट मैसेजिंग तंत्र के रूप में उपयोग कर सकता हूं?

नहीं। बस पूरा होने के लिए मुझे कारणों से फिर से शुरू करने दें।

  1. एप्पल खुद को अस्वीकार करता विश्वसनीयता इसके अलावा Programming Guide
  2. पढ़ा, APNS, एक क्यूओएस घटक है जो वास्तविक समय किया जा रहा है की कीमत पर विश्वसनीयता में वृद्धि हो सकती है (उदाहरण के लिए। मैं APNS भीतर किसी भी समय अधिसूचना देने के लिए पूछ सकते हैं 4 सप्ताह और पुनः प्रयास करें यदि डिवाइस पहुंच योग्य नहीं हैं) जो आपके मामले में उपयोगी नहीं है।
  3. आपकी आवश्यकता के अनुसार, यदि आप एक मूक धक्का (कोई उपयोगकर्ता दृश्य संदेश वाला धक्का) भेजते हैं, तो इसे उच्च प्राथमिकता वाले पुश के रूप में नहीं भेजा जा सकता है जो विश्वसनीयता को और भी कम करता है। यहाँ और न ही वे उच्च प्राथमिकता अपडेट के लिए हैं APN के व्यवहार करता है मूक सूचनाओं के रूप में कम प्राथमिकता एक प्रासंगिक उद्धरण

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

विल सेब को मंजूरी संभावित हजारों या लाखों सूचनाएं अपने सर्वर से एक दिन धक्का?

आम तौर पर, APNS लोड के मामले में इस के साथ कोई परेशानी नहीं होगी, लेकिन यह जगह पर थ्रॉटलिंग कर रहा है और वे आपकी अधिसूचनाओं को थ्रॉटल कर सकते हैं,

आईएमएचओ के ऊपर बिंदु 3 देखें, आपको एक्सएमपीपी देखना चाहिए क्योंकि इस प्रोटोकॉल को आपके जैसे उपयोग-मामलों को डिज़ाइन किया गया है और उनके पास वाई है सभी प्लेटफॉर्म पर सामुदायिक समर्थन। मैं सुझाव दूंगा कि आप https://github.com/robbiehanson/XMPPFramework जैसे कुछ देखें और अपने बैकएंड पर एक एक्सएमपीपी सर्वर सेट करें जो मैसेजिंग और उपस्थिति संदेशों के साथ-साथ व्यवस्थापक संदेशों को भी संभाल लेगा।

यदि आप पहले ही एक्सएमपीपी का मूल्यांकन कर चुके हैं और इसके साथ नहीं जाना चाहते हैं, तो मैं सुझाव दूंगा कि आपको आईओएस ऐप में एक बुद्धिमान प्रणाली को एक साथ रखने की आवश्यकता है जो ऐप स्टेट पर आधारित विभिन्न रणनीतियों को नियोजित करता है, जैसा कि आप निम्नलिखित कर सकते हैं रणनीतियों

  1. एक रीयलटाइम सॉकेट आधारित दृष्टिकोण -> एक स्थायी सॉकेट कनेक्शन बनाएं और जितना संभव हो उतना सिंक में डेटा रखने (यह तब होता है जब आपके एप्लिकेशन को अग्रभूमि या पृष्ठभूमि में चल रहा है)
  2. मतदान प्रणाली आप में बात की थी प्रश्न में, जिसका उपयोग तब किया जा सकता है जब आपके ऐप को पृष्ठभूमि फ़ेच/स्थान अपडेट आदि के लिए बुलाया जाता है।
  3. उपयोगकर्ता दिखाई मैसेजिंग + कस्टम डेटा के साथ
  4. उपयोग APNS, जब आपके सर्वर का पता लगाता है कि डिवाइस सक्रिय सॉकेट नहीं है और यह भी एक बहुत लंबे समय
संबंधित मुद्दे