
एप्लिकेशन को उपयोगकर्ता के कंप्यूटर पर नहीं, बल्कि एक दूरस्थ सर्वर पर लॉन्च करने और नेटवर्क पर उपयोगकर्ता को छवि प्रसारित करने का विचार नया नहीं है, और लंबे समय से हवा में है। सहमत, विचार अच्छा है: क्योंकि आपके कंप्यूटर पर किसी भी नए सॉफ़्टवेयर को स्थापित करने के लिए, आपको लाइसेंसिंग नीति (जो परवाह करता है) को समझने की आवश्यकता है, वितरण किट ढूंढें (अधिमानतः मैलवेयर के बिना), सॉफ़्टवेयर स्थापित करें और कॉन्फ़िगर करें - कभी-कभी आप अपना हाथ खो देंगे। इसके अलावा, सॉफ़्टवेयर अनुवाद दृष्टिकोण अपने उत्पादक हार्डवेयर की आवश्यकता को हटा देता है, जो टैबलेट कंप्यूटर और स्मार्टफोन की बिक्री में वार्षिक वृद्धि के प्रकाश में प्रासंगिक हो जाता है। हां, और इंटरनेट हर जगह मेगासिटीज में है: संगीत सुनना और ऑनलाइन फिल्में देखना, अंत में, हर कोई लंबे समय से इसका आदी हो चुका है।
यहां अभी तक इंटरनेट पर उपयोग के लिए उपयुक्त केवल एक पूरी तरह कार्यात्मक विकास देखा गया है। हमने सोचा कि यह अच्छा नहीं था और इसे करने का फैसला किया।
आइए एक नज़र डालें
मेरे हिस्से के लिए, यह पूरी तरह से पूरी तरह से मौजूदा का उल्लेख नहीं करने के लिए पूरी तरह से ईमानदार नहीं होगा, और यहां तक कि काफी अच्छी तरह से स्थापित Citrix XenApp और Microsoft App-V भी। दोनों उत्पाद बड़े संगठनों में अच्छा काम करते हैं, लेकिन परेशानी यह है: दोनों समाधान सेवा के सार्वजनिक प्रावधान (यानी, इंटरनेट के लिए) के लिए कम उपयोग के हैं। यह तकनीकी विशेषताओं के कारण है, क्योंकि इन प्रणालियों को मूल रूप से ग्राहक के एकीकरण के लिए डिज़ाइन किया गया था। इसके अलावा, यह मुख्य रूप से बड़े व्यवसाय का सवाल है, क्योंकि इस तरह के सिस्टम मध्यम और छोटे व्यवसायों के लिए सस्ती नहीं हैं। हां, और क्लाइंट सॉफ्टवेयर उपयोगकर्ता उपकरणों पर स्थापित होना चाहिए, समझा, कॉन्फ़िगर किया गया। व्यवहार में, यह पता चला है कि किसी भी उपकरण के लिए ग्राहक नहीं हैं (मैं टैबलेट के बारे में बात कर रहा हूं। स्मार्टफोन वितरकों के समर्थन के बावजूद नहीं हैं)। कहने की जरूरत नहीं है, उत्पाद डेटा के आधार पर एक सार्वजनिक सेवा बनाने का प्रयास कुछ भी अच्छा नहीं हुआ, जहां तक मुझे पता है।
और
विशेष रूप से वैश्विक नेटवर्क के लिए विंडोज अनुप्रयोगों को प्रसारित करने में सक्षम प्रणाली क्यों नहीं बनाई गई, हमने सोचा?
विंडोज-आधारित अनुप्रयोगों के बारे में बात करते हुए, हमारा मतलब है कि कोई भी सॉफ़्टवेयर जो Microsoft विंडोज ऑपरेटिंग सिस्टम के नियंत्रण में काम कर सकता है। उन्होंने विंडोज अनुप्रयोगों पर ध्यान केंद्रित क्यों किया? सब कुछ बहुत सरल है: विंडोज एप्लिकेशन व्यवसाय के लिए, काम के लिए, अध्ययन के लिए, उपयोग किए जाने वाले एप्लिकेशन हैं (और, महत्वपूर्ण रूप से, जानते हैं कि कैसे उपयोग करें) दुनिया भर के अरबों लोगों द्वारा। Microsoft Windows के लिए पहले से ही विकसित किए गए एप्लिकेशन की संख्या, मेरा मानना है कि लाखों में है, जो एक बड़ी अटूट कार्यक्षमता है, जो मेरी राय में, एक स्थान पर जमा होने के लिए बहुत अच्छा होगा।
अंतिम उपयोगकर्ता के लिए समझने में आसानी को सिस्टम की मुख्य कसौटी के रूप में चुना गया था, ताकि मेरी मां, जो अपने लैपटॉप पर पहले से इंस्टॉल किए गए और कॉन्फ़िगर किए गए सॉफ़्टवेयर के साथ काम करने के लिए अभ्यस्त हो, नवीनतम मॉडल नहीं, आसानी से इसका पता लगा सके।

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

और लेख के लेखक से जिम्प में थोड़ा प्रभाववाद
