संदेश सर्वर को पुश करें

किसी भी आधुनिक इंटरनेट सेवा में, केवल दो मुख्य कार्य हैं:

  • पहला उपयोगकर्ता प्राधिकरण है।
  • दूसरा सर्वर से क्लाइंट तक किसी ईवेंट को भेजने का तुरंत है।

पहला बिंदु, मुझे लगता है, स्पष्टीकरण की आवश्यकता नहीं है।

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

एक बेहतर समझ के लिए, सेवा एक निर्वात में एक निश्चित गोलाकार नहीं है। सेवा का प्रतिनिधित्व इस प्रकार किया जा सकता है:

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

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

सेवाओं के लगभग सभी उदाहरण "दूत" के रूप में प्रस्तुत किए जा सकते हैं। उदाहरणों का एक हिस्सा बिल्कुल इस तरह वर्णित किया गया था; मैंने कैमरे को जोड़ने और एक प्रसिद्ध दूत को चित्र भेजने के तरीके पर लेख देखा।

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

सर्वर स्क्रिप्ट कोड खुला और मुफ्त है



मैंने कार्यान्वयन के लिए नोड.जेएस सॉकेट.आईओ पोस्टग्रेक्यूएल चुना, मैंने पहले संस्करण को दो साल से अधिक समय पहले लागू किया था, और सेवा 1 सी https://infostart.ru/public/545047/ के साथ निकटता से जुड़ी थी, उन्होंने अभी तक कहीं भी एक इंटरेक्शन सर्वर की घोषणा नहीं की है। लेकिन यह एक लंबे समय से पहले था, फिलहाल, सर्वर भाग किसी भी तरह से उल्लेखित कार्यक्रम से जुड़ा नहीं है, क्लाइंट भाग को बाहरी प्रसंस्करण या विस्तार के रूप में एकीकृत किया जा सकता है।

चुना गया नाम महत्वपूर्ण है - "push0k"। पहला भाग "पुश संदेश" वाक्यांश से लिया गया है, दूसरा अंग्रेजी में संक्षिप्त रूप में प्रसिद्ध है, लेकिन यह सबसे महत्वपूर्ण के लिए शून्य के माध्यम से लिखा गया है।

इस मामले में, यह "मूसट्रैप में मुफ्त पनीर" नहीं है, क्योंकि इसमें इंटरनेट के माध्यम से काम करने के लिए एक विंडोज़, लिनक्स, मैकओएस (सर्वर) कंप्यूटर की आवश्यकता होती है, आपको संभवतः बाहरी आईपी पते की आवश्यकता होती है। अधिमानतः बाहरी आईपी पते के साथ जुड़ा डोमेन नाम। इसके अलावा, यह वांछनीय है, लेकिन आवश्यक नहीं, एक डोमेन नाम के साथ जुड़ा हुआ एक स्व-हस्ताक्षरित प्रमाण पत्र।

कोई हार्डवेयर आवश्यकताएं नहीं हैं जैसे कि, यह होम नैस पर काम कर सकता है, जहां डॉकटर है। Nas में Docker का अर्थ है x86-64 आर्किटेक्चर, और postgreSQL को ऐसे nas में बिना डॉकटर के इंस्टॉल नहीं किया जा सकता है। ऐसे सर्वर कितने क्लाइंट का समर्थन कर सकते हैं, इसकी सटीक समझ कार्यों पर निर्भर करती है - सेवा का तर्क और ग्राहकों के बीच संचारित ट्रैफ़िक।

सर्वर विवरण:


सर्वर अतिरिक्त मॉड्यूल का उपयोग करता है:

  • सॉकेट.आईओ - मॉड्यूल एक टन के साथ एक वेबसोकेट प्रोटोकॉल जोड़ता है। संभव।
  • नोड-पोस्टग्रेज - पोस्टग्रेएसक्यूएल डेटाबेस सर्वर के साथ संचार के लिए मॉड्यूल।
  • pm2 एक लोड बैलेंसर के साथ कई सर्वर प्रक्रियाओं को शुरू करने के लिए एक मॉड्यूल है।

सर्वर फ़ाइलें:


  • starter.js - http (s) सेवा, आप सर्वर व्यवस्थापक पैनल कह सकते हैं। इस सेवा के माध्यम से, सेटिंग्स बदल दी जाती हैं और मुख्य वेबसोकेट सर्वर की प्रक्रियाओं को लॉन्च किया जाता है।
  • push0k.js मुख्य वेबसोकेट सर्वर है।
  • starter_cfg.js - सर्वर प्रशासनिक स्क्रिप्ट सेटिंग। PostgreSQL के लिए कनेक्शन और https कनेक्शन के लिए फाइलें। अधिक से अधिक सुरक्षा के लिए, https कनेक्शन और साथ ही डोमेन नाम के लिए फाइलें मुख्य सर्वर से भिन्न हो सकती हैं। इसे पहली शुरुआत में मैन्युअल रूप से बदला जाता है।
  • config.js - पूरे सर्वर की मूल सेटिंग्स।
  • package.js - फ़ाइल विवरण संस्करण लेखक मॉड्यूल काम के लिए आवश्यक है।
  • push0kStructure.sql - प्रारंभिक आरंभीकरण के लिए पोस्टग्रेक्यूएल डेटाबेस का फ़ाइल विवरण, एक खाली डेटाबेस।

स्थापना:


1. प्रारंभ में, आपको node.js nodejs.org/en/download को इंस्टॉल करना होगा

2. PostgreSQL को स्थानीय नेटवर्क कंप्यूटर या उसी postgrespro.ru/products/download पर भी इंस्टॉल किया जाना चाहिए

पोस्टग्रेएसक्यूएल सर्वर पर, आवश्यक तालिकाओं के साथ एक डेटाबेस बनाने के लिए "पुश0kStructure.sql" फ़ाइल या इस फाइल के लगभग सभी प्रश्नों को निष्पादित करना आवश्यक है।

3. किसी भी कंप्यूटर निर्देशिका में push0kStructure.sql को छोड़कर पहले पाँच सर्वर फ़ाइलों को डाउनलोड करें।

4. किसी भी टेक्स्ट एडिटर में, फ़ाइल को "starter_cfg.js" संपादित करें। PostgreSQL सर्वर से कनेक्ट करने के लिए पैरामीटर निर्दिष्ट करना और पुश0k सर्वर के प्रशासनिक भाग से कनेक्ट करने के लिए पोर्ट सेट करना महत्वपूर्ण है।

5. टर्मिनल शुरू करें (कंसोल) और कमांड का उपयोग करें "सीडी / पथ / अपने / निर्देशिका /" सर्वर फ़ाइल निर्देशिका में जाने के लिए। टर्मिनल कमांड में निर्दिष्ट पथ बिंदु 3 से होना चाहिए।

6. अतिरिक्त मॉड्यूल स्थापित करने के लिए "npm इंस्टॉल" टर्मिनल में कमांड चलाएँ।
प्रशासन सेवा शुरू करने के लिए टर्मिनल "नोड स्टार्टर.जेएस" में कमांड चलाएं।

7. पुश करें और पुश0k एडमिन प्रोग्राम इंस्टॉल करें। "पुश0k एडमिन" में वेबसोकेट बेसिक पैरामीटर, सर्वर पोर्ट, प्रक्रियाओं की संख्या और कई अन्य कॉन्फ़िगर किए गए हैं। आप सर्वर प्रक्रियाओं की शुरुआत और ठहराव को नियंत्रित कर सकते हैं, उपयोगकर्ताओं और उनके कमरों (समूहों) का निर्माण और प्रबंधन कर सकते हैं।

Push0k व्यवस्थापक अनुप्रयोग




आवेदन vue.js. का उपयोग करके इलेक्ट्रॉन पर किया जाता है अंदर, एक प्रकार की विंडो प्रणाली लागू की जाती है, छोटे मोडल संवादों को खिड़कियों की तरह खींचा और गिराया जा सकता है, खिड़कियों के लिए खिड़की के शीर्षक, विंडोज़ 10 के समान मैक ओएस के लिए नवीनतम संस्करणों के समान बनाए जाते हैं, लेकिन अभी तक अंधेरे विषय को ध्यान में रखे बिना। लिनक्स के लिए, मैं बाद में संकलित करूंगा, यह संवाद हेडर के साथ थोड़ा अधिक जटिल है, मुझे लगता है कि यह ubuntu की तरह होगा और, अगर ubuntu नहीं है, तो 10 शैली जीतें। जीत की स्मृति खपत 10 और मैक ओएस 150 मेगाबाइट से अधिक नहीं देखी गई।

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



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

जैसा कि पहले उल्लेख किया गया है, नियंत्रण http और ws (websocket) प्रोटोकॉल का उपयोग करता है। सुरक्षित https और wss कनेक्शन का उपयोग करना संभव है। सुरक्षित कनेक्शन के साथ, आप उपयोग किए गए प्रमाणपत्रों का डेटा देख सकते हैं। ब्राउज़रों के समान, "लॉक" आइकन का उपयोग किया जाता है - कनेक्शन सुरक्षित है, "लॉक खोलें" - कनेक्शन असुरक्षित है। और आइकन के बिना, क्रमशः - एक सुरक्षित कनेक्शन का उपयोग नहीं किया जाता है।



सामान्य तर्क


मैंने इस तरह का आवेदन कभी नहीं देखा। विकास के दौरान, मुझे इस तथ्य से निर्देशित किया गया था कि मैं खुद निगरानी में रुचि रखता हूं और आंकड़ों में क्या पैरामीटर देखना है।

उदाहरण के लिए, प्रत्येक कनेक्शन के लिए कनेक्शन तालिका में डेटा "कनेक्शन समय", "प्राधिकरण समय", "सिंक्रनाइज़ेशन समय" है। पहला आपको यह समझने की अनुमति देता है कि कनेक्शन कितनी जल्दी "ws: //" या संरक्षित "wss: //" स्थापित है। दूसरा - कनेक्शन के बाद, प्राधिकरण डेटा के साथ एक संदेश अलग से भेजा जाता है, प्राधिकरण के दौरान, एक उपयोगकर्ता सत्यापन अनुरोध किया जाता है और प्रत्येक कनेक्शन के लिए एक पासवर्ड हैश चेक अद्वितीय होता है। तीसरा, नए संदेश और नए या अपडेट किए गए संदर्भ डेटा प्राप्त करने का समय है। इसके अलावा, नोड.जेएस, सॉकेट.आईओ, और अन्य वर्णित डेटा के संस्करण आम तौर पर सहेजे जाते हैं, जो यह समझना संभव बनाते हैं कि नोड.जेएस या मॉड्यूल का अद्यतन अलग-अलग गति को कैसे प्रभावित करता है, या कुछ सर्वर शोधन प्रभावित हो सकता है।



ऊपर दिए गए उदाहरण में, इस तरह के डेटा का केवल एक छोटा सा हिस्सा वर्णित है। इसके अलावा, एक अलग तालिका में, एमबी / एस के समय, आकार और गति को बचाया जाता है। डेटा सिंक्रनाइज़ेशन डाउनलोड करें। एक ही तालिका सर्वर से अटैचमेंट फाइल डाउनलोड करने और सर्वर से इस डेटा को डाउनलोड करने का डेटा संग्रहीत करती है।

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

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

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

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



स्क्रीनशॉट से उदाहरण:

यह कभी-कभी सबसे आश्चर्यजनक होता है, केवल 10,000 संदेश और 390,000 इशारे,
50,000 संदेश भेजना: सर्वर प्रक्रिया: 4 उपयोगकर्ता: 3
कुल संदेशों को 10,000 * 3 = 30,000 प्राप्त हुए
अन्य सर्वर प्रक्रियाओं के लिए 30,000 * सर्वर प्रक्रियाओं को अग्रेषित करना: 4 - 1 = 90,000
प्राप्तकर्ताओं को भेजे गए 30,000 * उपयोगकर्ता: 3 - 1 = 60,000
संदेश पोस्टग्रेएसक्यूएल टेबल 30 000 पर लिखे गए हैं
90,000 डिलीवरी नोटिफिकेशन मिले
डिलीवरी नोटिफिकेशन 90,000 की पोस्टग्रेक्यूएल तालिका में दर्ज किया गया
सभी ऑपरेशन 390,000

Push0k व्यवस्थापक में डेटा तर्क


प्रत्येक कनेक्शन के साथ, सभी संदर्भ डेटा प्राप्त किया जाता है: उपयोगकर्ता, कमरे, उपकरण, डेटाबेस, साथ ही "जर्नल-सांख्यिकीय" की अंतिम 300 प्रविष्टियां: कनेक्शन, डेटा सिंक्रोनाइज़ेशन, अनुलग्नकों को अग्रेषित करना, संदेश, जर्नल।

संदेश व्यावहारिक रूप से पोस्टग्रैस्कल तालिका को दोहराते हैं और इसमें फ़िल्टर, सेटिंग्स और ऐसा फ़ॉर्म नहीं होता है जहां आप संदेश को पूरी तरह से देख सकते हैं। तालिका का तर्क डिबगिंग है, यह विकास के दौरान जल्दी से देखना संभव है कि क्या संदेश तालिका तक पहुंच गया है या नहीं।



टेबल "उपयोगकर्ता", "कमरे (समूह)", "कनेक्शन" और "जर्नल" स्वचालित रूप से अपडेट किए जाते हैं। बाकी डेटा के लिए, ऑनलाइन अपडेट करने का कोई मतलब नहीं है।

Push0k व्यवस्थापक एप्लिकेशन को यहां डाउनलोड किया जा सकता है:

विंडोज: push0kadmin सेटअप 19.1.11.exe
मैक ओएस: push0kadmin-19.1.11inosg

यह मुफ़्त है, लेकिन सर्वर के विपरीत, मैं अभी तक स्रोत कोड खोलने की योजना नहीं बनाता हूं।

अगले लेख में मैं push0k desctop ग्राहक के ग्राहक भाग का वर्णन करूंगा, साथ ही एक छोटा उदाहरण, कोड और सर्वर से डेटा कैसे कनेक्ट, लॉग इन और प्राप्त कर सकता हूं।

पहले उल्लिखित पूर्व संस्करणों के लिए एक एंड्रॉइड क्लाइंट भी था, जो कि एंड्रॉइड के 7 वें और 8 वें संस्करणों की पृष्ठभूमि में रहता था। लेकिन अब, मुझे लगता है कि मैं लंबे समय तक पीछे नहीं रहा। बाद में, मुझे लगता है कि एंड्रॉइड क्लाइंट के साथ एक तीसरा लेख होगा, और वहां आप देखते हैं और आईओएस दूर नहीं है।

Source: https://habr.com/ru/post/hi438388/


All Articles