लंबाई के बारे में क्षमा करें, यह थोड़े आवश्यक है।
परिचय
मैं Windows Vista / 7 के लिए C # 4.0 में एक दूरस्थ डेस्कटॉप सॉफ़्टवेयर (केवल मनोरंजन के लिए) विकसित कर रहा हूं। मैंने बुनियादी बाधाओं के माध्यम से प्राप्त किया है: मेरे पास एक मजबूत यूडीपी मैसेजिंग सिस्टम है, अपेक्षाकृत स्वच्छ प्रोग्राम डिज़ाइन है, मुझे एक मिरर ड्राइवर (डेमोफाइगर से मुक्त DFMirage मिरर ड्राइवर) मिला है, जो ऊपर और चल रहा है, और मैंने सभी के लिए NAT ट्रैवर्सल लागू किया है सममित NATs (कॉर्पोरेट फ़ायरवॉल स्थितियों में मौजूद) को छोड़कर NAT प्रकार।
स्क्रीन ट्रांसफर / शेयरिंग के बारे में, मिरर ड्राइवर के लिए धन्यवाद, मैं स्वचालित रूप से परिवर्तित स्क्रीन क्षेत्रों के बारे में सूचित करता हूं और मैं बस अपने खुद के बिटमैप के लिए मिरर ड्राइवर के बदलते स्क्रीन बिटमैप को मार्शल कर सकता हूं। फिर मैं स्क्रीन क्षेत्र को PNG के रूप में संपीड़ित करता हूं और इसे सर्वर से अपने क्लाइंट को भेजता हूं। चीजें बहुत अच्छी लग रही हैं, लेकिन यह काफी तेज नहीं है। यह VNC के समान ही धीमा है (btw, मैं VNC प्रोटोकॉल का उपयोग नहीं करता, बस एक कस्टम शौकिया प्रोटोकॉल है)।
सबसे धीमे दूरस्थ डेस्कटॉप सॉफ़्टवेयर से सबसे तेज़, सूची आमतौर पर सभी वीएनसी-जैसे कार्यान्वयन पर शुरू होती है, फिर माइक्रोसॉफ्ट विंडोज रिमोट डेस्कटॉप पर चढ़ जाती है ... और फिर ... टीम व्यूअर। CrossLoop, LogMeIn के बारे में बिल्कुल निश्चित नहीं है - मैंने उनका उपयोग नहीं किया है, लेकिन TeamViewer बहुत तेजी से है। यह काफी शाब्दिक रूप से जीना है। मैंने tree
कमांड प्रॉम्प्ट पर एक कमांड चलाई और यह 20 एमएस विलंब के साथ अपडेट हुआ। मैं अपने लैपटॉप की तुलना में कुछ मिलीसेकेंड धीमा वेब ब्राउज़ कर सकता हूं। Visual Studio में लंबवत कोड को स्क्रॉल करने का समय 50 ms अंतराल समय है। इस सब को पूरा करने के लिए टीमव्यूअर का स्क्रीन-ट्रांसफर समाधान कितना मजबूत होना चाहिए, इसके बारे में सोचें।
VNCs स्क्रीन परिवर्तन का पता लगाने के लिए पोल-आधारित हुक का उपयोग करते हैं और अपने सबसे खराब रूप में तुलना / स्क्रीनिंग को बल देते हैं। अपने सबसे अच्छे रूप में, वे DFMirage जैसे दर्पण चालक का उपयोग करते हैं। मैं इस स्तर पर हूं। और वे RFB प्रोटोकॉल नामक कुछ का उपयोग करते हैं।
Microsoft Windows दूरस्थ डेस्कटॉप जाहिरा तौर पर VNC से एक कदम अधिक है। मैंने सुना है, StackOverflow पर कहीं से, कि विंडोज रिमोट डेस्कटॉप स्क्रीन बिटमैप नहीं भेजता है, लेकिन वास्तविक ड्राइंग कमांड। यह काफी शानदार है, क्योंकि यह सिर्फ सरल पाठ भेज सकता है (इस समन्वय पर आयत को खींचें और इस ढाल के साथ इसे रंग दें)! रिमोट डेस्कटॉप वास्तव में बहुत तेज है - और यह घर से काम करने का मानक तरीका है। और यह आरडीपी प्रोटोकॉल नामक कुछ का उपयोग करता है।
अब TeamViewer मेरे लिए एक पूर्ण रहस्य है। जाहिरा तौर पर, उन्होंने संस्करण 2 के लिए अपना सोर्स कोड जारी किया (फरवरी 2012 तक टीमव्यूअर संस्करण 7 है)। लोगों ने इसे पढ़ा और कहा कि संस्करण 2 बेकार है - यह स्वचालित एनएटी ट्रैवर्सल के साथ वीएनसी पर कुछ सुधार है।
लेकिन संस्करण 7 ... अब यह बहुत तेजी से हास्यास्पद है। मेरा मतलब है, यह वास्तव में विंडोज रिमोट डेस्कटॉप से तेज है। मैंने टीम व्यूअर के साथ डायरेक्टएक्स 3 डी गेम्स को स्ट्रीम किया है (1 एफपीएस पर, लेकिन विंडोज रिमोट डेस्कटॉप भी डायरेक्टएक्स को चलाने की अनुमति नहीं देता है)।
वैसे, TeamViewer यह सब बिना मिरर ड्राइवर के करता है। एक को स्थापित करने का एक विकल्प है, और यह बस थोड़ा तेज हो जाता है।
प्रश्न
मेरा सवाल है, टीमव्यूअर इतनी जल्दी कैसे है?यह संभव नहीं होना चाहिए। यदि आपको १४ you've० रिज़ॉल्यूशन पर २४० बीट गहराई पर भी मिल गया है (१६ बिट डेप्थ काफ़ी बदसूरत होगा), तो अभी भी ६,२२, .०० बाइट्स कच्चे हैं। यहां तक कि libjpeg-टर्बो (बड़े निगमों द्वारा उपयोग किए जाने वाले सबसे तेज JPG संपीड़न पुस्तकालयों में से एक) का उपयोग करते हुए, इसे 30KB तक कम कर देना (जो बेहद उदार हो सकता है), TeamViewer के सर्वर (TeamViewer) के माध्यम से रूट करने के लिए समय लेगा, बस समीपवर्ती ट्रैफ़िक के माध्यम से ट्रैफ़िक के माध्यम से कॉर्पोरेट सममित एनएएस को पार करता है। उनके सर्वर)। और वह libjpeg- टर्बो कम्प्रेशन को सेक करने में समय लेगा। उच्च-गुणवत्ता वाले JPG संपीड़न में पूर्ण 1920 के लिए 1080 स्क्रीनशॉट के लिए 175 मिली सेकेंड लगते हैं। और वह संख्या बढ़ जाती है यदि होस्ट का कंप्यूटर एटम प्रोसेसर चलाता है। मुझे आसानी से समझ में नहीं आ रहा है कि टीमव्यूअर ने अपने स्क्रीन ट्रांसफ़र को इतनी अच्छी तरह से कैसे अनुकूलित किया है। फिर, छोटे आकार के चित्र अत्यधिक संकुचित हो सकते हैं, लेकिन कम से कम दसियों मिलीसेकंड तक सेक लें। बड़े आकार की छवियों को संपीड़ित होने में समय नहीं लगता है, लेकिन इसे प्राप्त करने में लंबा समय लगता है। किसी तरह, TeamViewer लगभग 20-25 फ्रेम प्रति सेकंड पाने के लिए इस पूरी प्रक्रिया को पूरा करता है। मैंने एक नेटवर्क मॉनिटर का उपयोग किया है, और टीमव्यूअर अभी भी 500 केबीपीएस और 1 एमबीपीएस (उस ट्रांसफर दर पर कुछ सेकंड के लिए वीएनसी सॉफ्टवेयर लैग) की गति से सुस्त है। मेरे के दौरानtree
कमांड प्रॉम्प्ट टेस्ट, TeamViewer 1 एमबीपीएस की दर से इनबाउंड डेटा प्राप्त कर रहा था और अभी भी 5-6 एफपीएस चल रहा है। VNC और दूरस्थ डेस्कटॉप ऐसा नहीं करते हैं। तो कैसे?
उत्तर कुछ जटिल और जटिल होंगे, इसलिए कृपया अपना $ 0.02 पोस्ट न करें यदि आप केवल यह कहने जा रहे हैं क्योंकि वे टीसीपी के बजाय यूडीपी का उपयोग करते हैं (क्या आप विश्वास करेंगे कि वे वास्तव में टीसीपी का उपयोग सफलतापूर्वक करते हैं)।
मुझे उम्मीद है कि StackOverflow पर एक टीमव्यूअर डेवलपर यहाँ कहीं है।
संभावित उत्तर
लोग जवाब देने के बाद इसे अपडेट करेंगे।
- मेरे विचार हैं, सबसे पहले, टीमव्यूअर का नेटवर्क ठीक है। उदाहरण के लिए, वे एमटीयू के आकार के नीचे बड़े पैकेट को विभाजित करते हैं और कभी भी यात्रा को बर्बाद नहीं करते हैं। उनके पास संभवतः बहुत तेज़ XOR छवि तुलनाओं के साथ स्क्रीन परिवर्तनों का पता लगाने के लिए सभी प्रकार के फैंसी हुक हैं।