2011-02-23 13 views
56

मैं एक ऐसा एप्लिकेशन लिख रहा हूं जिसमें मैं दस्तावेजों के लिए वास्तविक समय सहयोगी संपादन सुविधाओं के करीब होना चाहता हूं (Google दस्तावेज़ शैली संपादन के समान ही)।वास्तविक समय सहयोगी संपादन - यह कैसे काम करता है?

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

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

यह वास्तव में केवल Google क्रोम में काम करना है, अधिमानतः फ़ायरफ़ॉक्स भी। मुझे किसी अन्य ब्राउज़र का समर्थन करने की आवश्यकता नहीं है।

उत्तर

42

एकाधिक सहकर्मियों से सहयोगी संपादन विलय करने के लिए दृश्यों के पीछे उपयोग किए गए एल्गोरिदम को operational transformation कहा जाता है। यद्यपि लागू करने के लिए यह तुच्छ नहीं है।

उपयोगी लिंक के लिए this question भी देखें।

+0

तो अगर मैं http://code.google.com/p/google-diff-match-patch/ का उपयोग करना चाहता था, और कहें कि प्रत्येक 0.5 सेकंड में एक diff उत्पन्न करें, इसे सर्वर पर भेजें और अन्य सभी diffs खींचें और उन्हें सर्वर से वापस कर दें, क्या आपको लगता है कि यह काम करेगा? क्या यह डेटाबेस में संग्रहीत बहुत सारे डेटा को जोड़ नहीं सकता है? –

+0

वास्तविक संचालन परिवर्तन की तुलना में संसाधनों के संदर्भ में यह शायद अधिक महंगा है। मुझे लगता है कि यदि आपके पास कुछ उपयोगकर्ता हैं तो यह काम कर सकता है। –

+3

यदि आप परिचालन परिवर्तन के कार्यान्वयन की तलाश में हैं, तो मैं Google-MobWrite को देखने का सुझाव दूंगा (लिंक लिंक किए गए प्रश्न में पाया जा सकता है)। – gamers2000

2

Google डॉक्स टीम ने वास्तविक समय सहयोग कैसे काम किया, इस बारे में एक मामला अध्ययन किया, लेकिन मुझे ब्लॉग प्रविष्टि नहीं मिल रही।

, विकिपीडिया पृष्ठ पर कुछ सभ्य सामान नहीं है, हालांकि: Gintautas http://en.wikipedia.org/wiki/Collaborative_real-time_editor

3

के रूप में कहे अनुसार, इस आपरेशनल परिवर्तन द्वारा किया जाता है। जैसा कि मैंने इसे समझ लिया है, इस सुविधा पर अनुसंधान और विकास का बड़ा हिस्सा अब-निष्क्रिय Google वेव प्रोजेक्ट के हिस्से के रूप में किया गया था, और वेव प्रोटोकॉल के रूप में जाना जाता है। सौभाग्य से, Google वेव खुले-सोर्स हैं, इसलिए आप http://code.google.com/p/wave-protocol/

+1

ओटी अनुसंधान और विकास का बड़ा हिस्सा 80 के उत्तरार्ध में किया गया था। –

13

पर कुछ अच्छे कोड नमूने प्राप्त कर सकते हैं, आपको इसके लिए xmpp या लहर की आवश्यकता नहीं है। एक ओपनसोर्स कार्यान्वयन पर अधिकांश काम infinote कहा जाता है पहले से ही jinfinote (https://github.com/sveith/jinfinote) के साथ किया गया है। जिनफिनोट को हाल ही में समेकन और दस्तावेज़ राज्य को केंद्रीय रूप से संभालने के लिए पाइथन (https://github.com/phrearch/py-infinote) पर भी पोर्ट किया गया था। मैं वर्तमान में hwios प्रोजेक्ट (https://github.com/phrearch/hwios) के भीतर दोनों का उपयोग करता हूं, जो वेबसाइकिल और जेसन परिवहन पर निर्भर करता है। आप वास्तव में इस तरह के अनुप्रयोगों के लिए मतदान का उपयोग नहीं करना चाहते हैं। इसके अलावा xmpp चीजों को अनावश्यक रूप से imo जटिल लगता है।

+1

+1 जो लोग Jinfinote के लिए ब्राउज़र में इसे कार्यान्वित करना चाहते हैं, उनके लिंक के लिए +1। –

6

इस प्रश्न पर आने और अधिक सावधानीपूर्वक खोज करने के बाद, मुझे लगता है कि चेक करने के लिए सबसे अच्छा स्टैंडअलोन एप्लिकेशन Etherpad होगा, जो एक जेएस ब्राउज़र ऐप के रूप में चलता है और सर्वर पक्ष पर Node.js का उपयोग करता है। इसके पीछे की तकनीक operational transformation के रूप में जानी जाती है।

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

मैं हूं:

Etherpad के बाद से, इस तकनीक को विभिन्न संस्करणों, विशेष रूप से कुछ जावास्क्रिप्ट पुस्तकालयों कि सीधे अपने वेब एप्लिकेशन में इस एकीकृत करने के लिए अनुमति देने के लिए किया गया है रीयलटाइम संपादकों को सीधे Meteor ऐप में जोड़ने के लिए meteor-sharejs पैकेज का रखरखाव, जो आईएमएचओ दोनों दुनिया में सबसे अच्छा है :)

9

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

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

  • पहचान: कौन लोग आपके साथ सहयोग कर रहे हैं कर रहे हैं।
  • उपस्थिति: वर्तमान में आपके साथ "यहां" संपादन कौन कर रहा है।
  • संचार: बातचीत, है कि उपयोगकर्ताओं को कार्रवाई
  • सहयोगात्मक cueing समन्वय करने के लिए अनुमति देने के ऑडियो, वीडियो, आदि,: विशेषताएं है कि अन्य प्रतिभागियों क्या कर रहे हैं के रूप में संकेत दे और/या क्या करने वाले हैं।

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

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

आखिरकार, एक प्रभावी वास्तविक समय सहयोगी संपादन प्रणाली को लागू करने के लिए, आपको इन सभी पहलुओं पर विचार करने की आवश्यकता है; और हमने इतिहास, प्राधिकरण, आवेदन स्तर संघर्ष समाधान, और कई अन्य पहलुओं पर भी चर्चा नहीं की है। आपको ऐसी प्रौद्योगिकियों को बनाना या ढूंढना होगा जो इन अवधारणाओं में से प्रत्येक का समर्थन करते हैं जो आपके उपयोग के मामले में समझ में आता है। फिर आपको उन्हें एकीकृत करना होगा।

अच्छी खबर यह है कि सहयोगी संपादन का समर्थन करने वाले अनुप्रयोग अधिक लोकप्रिय होते जा रहे हैं। जो तकनीकें उन्हें निर्माण करने में सहायता करती हैं वे परिपक्व हैं और नए महीने हर महीने उपलब्ध हो रहे हैं। Firebase उन पहले समाधानों में से एक था जिन्होंने इन अवधारणाओं में से कई में उपयोग करने में आसान एपीआई में लपेटने की कोशिश की थी। एक नया-कॉमर Convergence (पूर्ण प्रकटीकरण, मैं कनवर्जेन्स लैब्स का संस्थापक हूं), एक इन-इन-वन एपीआई प्रदान करता है जो इन सहयोगी संपादन पहलुओं में से अधिकांश का समर्थन करता है और वास्तविक समय के निर्माण के समय, लागत और जटिलता को काफी कम कर सकता है सहयोगी संपादन क्षुधा।

https://quill-sharedb-cursors.herokuapp.com

यह ShareDB (OT) बंद आधारित है बैकएंड और Quill रिच टेक्स्ट संपादक के रूप में काम:

0

मैं हाल ही में आप क्या हासिल करने की कोशिश कर रहे हैं लगता है की एक काम उदाहरण के साथ एक भंडार प्रकाशित किया है अग्रभाग पर।

असल में इन सभी चीजों को some more code to draw the cursors के साथ तारित करता है। कोड को समझने और किसी विशिष्ट समाधान पर प्रतिलिपि बनाने के लिए काफी सरल होना चाहिए।

उम्मीद है कि यह प्रयास के साथ मदद करता है।

संबंधित मुद्दे