javascript - ورفعه - كيف اسوي تطبيق في الاب ستور




كيفية تصميم تطبيق الويب ajax متعدد المستخدمين لتكون آمنة في نفس الوقت (6)

أعلم أن هذا سؤال قديم ، لكنني اعتقدت أنني سأتحدث فقط.

يبدو أن OT (تحويلات تشغيلية) مناسبة تمامًا لمتطلباتك الخاصة بالتعديل متعدد المستخدمين المتزامن والمتسق. إنها تقنية تُستخدم في محرّر مستندات Google (وكانت تُستخدم أيضًا في Google Wave):

هناك مكتبة قائمة على JS لاستخدام التحويلات التشغيلية - ShareJS ( http://sharejs.org/ ) ، كتبها عضو من فريق Google Wave.

وإذا كنت ترغب في ذلك ، فهناك إطار عمل MVC كامل على الويب - DerbyJS ( http://derbyjs.com/ ) مبني على ShareJS ويفعل ذلك لك.

يستخدم المتصفح BrowserChannel للتواصل بين الخادم والعملاء (وأعتقد أن دعم WebSockets يجب أن يكون في الأعمال - كان موجودًا من قبل عبر Socket.IO ، ولكن تم إخراجه بسبب مشكلات المطور مع Socket.io) مستندات المبتدئين متفرقة قليلا في الوقت الحالي ، ولكن.

لدي صفحة ويب تعرض كمية كبيرة من البيانات من الخادم. يتم الاتصال عبر ajax.

في كل مرة يتفاعل فيها المستخدم ويغير هذه البيانات (قل مستخدم أ إعادة تسمية شيء ما) فإنه يخبر الخادم بتنفيذ الإجراء ويعيد الخادم البيانات التي تم تغييرها.

إذا قام المستخدم B بالوصول إلى الصفحة في نفس الوقت وإنشاء كائن بيانات جديد فإنه سيخبر الخادم مرة أخرى عبر ajax وسيعود الخادم مع الكائن الجديد للمستخدم.

في صفحة "أ" لدينا البيانات التي تحتوي على كائن تمت إعادة تسميته. وفي صفحة B لدينا البيانات مع كائن جديد. على الخادم ، تحتوي البيانات على كائن تمت إعادة تسميته وكائن جديد.

ما هي خياراتي للحفاظ على الصفحة متزامنة مع الخادم عند استخدام عدة مستخدمين لها بشكل متزامن؟

بدلاً من ذلك ، يتم تجنب مثل هذه الخيارات مثل قفل الصفحة بأكملها أو إغراق الحالة بأكملها للمستخدم في كل تغيير.

إذا كان يساعد ، في هذا المثال المحدد ، تستدعي صفحة الويب webmethod ثابت يقوم بتشغيل إجراء مخزن في قاعدة البيانات. سيقوم الإجراء المخزن بإرجاع أي بيانات تم تغييرها وليس أكثر. Webmethod ثابت ثم إعادة توجيه الإجراء المخزن إلى العميل.

باونتي

كيف تقوم بتصميم تطبيق ويب متعدد المستخدمين والذي يستخدم Ajax للتواصل مع الخادم ولكن يتجنب المشاكل بالتزامن؟

أي الوصول المتزامن إلى وظائف والبيانات على قاعدة بيانات دون أي خطر من البيانات أو الفساد الدولة


إن محاولة كتابة كل هذا بنفسك هي مهمة كبيرة ، ومن الصعب جدًا الحصول عليها بشكل صحيح. يتمثل أحد الخيارات في استخدام إطار تم تصميمه للحفاظ على مزامنة العملاء لقاعدة البيانات مع بعضهم البعض في الوقت الفعلي.

لقد وجدت أن إطار Meteor يعمل بشكل جيد ( http://docs.meteor.com/#reactivity ).

"يحتضن نيزك مفهوم البرمجة التفاعلية. وهذا يعني أنه يمكنك كتابة التعليمات البرمجية الخاصة بك بأسلوب بسيط بسيط ، وستتم إعادة حساب النتيجة تلقائيًا كلما تغيرت البيانات التي تعتمد عليها شفرتك."

"هذا النمط البسيط (الحساب التفاعلي + مصدر البيانات التفاعلي) له قابلية تطبيق واسعة. يتم حفظ المبرمج من كتابة إلغاء الاشتراك / إعادة الاتصال بالمكالمات والتأكد من استدعائها في الوقت المناسب ، مما يؤدي إلى استبعاد فئات كاملة من كود نشر البيانات التي قد تسد التطبيق مع المنطق عرضة للخطأ. "


تقنيات الدفع من جانب الخادم هي الطريق للذهاب هنا. Comet هو (أو كان؟) كلمة الطنانة.

يعتمد الاتجاه المعين الذي تتخذه بشكل كبير على مكدس الخوادم الخاص بك ، ومدى مرونة / تواجدك. إذا كنت تستطيع ، فأنا ألقي نظرة على socket.io ، الذي يوفر socket.io عبر المستعرض من websockets ، والتي توفر طريقة مبسطة للغاية لإجراء اتصال ثنائي الاتجاه مع الخادم ، مما يسمح للخادم بدفع التحديثات إلى العملاء.

على وجه الخصوص ، راجع this العرض التوضيحي من قبل مؤلف المكتبة ، والذي يوضح الوضع الذي تصفه تمامًا.


قد تساعد هذه الصفحات في ويكيبيديا على إضافة منظور للتعلم عن concurrency والحوسبة المتزامنة لتصميم تطبيق الويب ajax الذي pulls أو EDA رسائل حالة الولاية ( EDA ) في نمط مراسلة . بشكل أساسي ، يتم نسخ الرسائل إلى المشتركين القناة التي تستجيب أحداث التغيير وطلبات المزامنة.

هناك العديد من أشكال البرامج التعاونية المتزامنة القائمة على الويب.

هناك عدد من مكتبات عملاء HTTP API لـ etherpad-lite ، وهو محرر تعاوني في الوقت الفعلي .

django-realtime-playground يطبق تطبيق دردشة حقيقي في Django مع العديد من التقنيات في الوقت الحقيقي مثل Socket.io .

تطبيق كل AppEngine و AppScale API AppEngine Channel ؛ وهو يختلف عن واجهة برمجة تطبيقات Google Realtime ، والتي يتم عرضها من خلال googledrive/realtime-playground .


سأفكر في إضافة ختم معدل يستند إلى الوقت لكل مجموعة بيانات. لذلك ، إذا كنت تقوم بتحديث جداول db ، فستقوم بتغيير الطابع الزمني المعدل وفقًا لذلك. باستخدام AJAX ، يمكنك مقارنة الطابع الزمني المعدل للعميل مع الطابع الزمني لمصدر البيانات - إذا كان المستخدم في الخلف ، قم بتحديث الشاشة. تشبه الطريقة التي يتحقق بها هذا الموقع من سؤال ما دوريًا لمعرفة ما إذا كان هناك شخص آخر قد أجاب أثناء كتابة إجابة.


لا أستطيع أن أصدق أن أحدا لم يذكر Meteor . إنه إطار جديد وغير ناضج بالتأكيد (ويدعم رسمياً قاعدة بيانات واحدة فقط) ، ولكنه يأخذ كل عمل النتوء والتفكير في تطبيق متعدد المستخدمين مثلما يصفه الملصق. في الواقع ، لا يمكنك إنشاء تطبيق مباشر للتحديث متعدد المستخدمين. فيما يلي ملخص سريع:

  • كل شيء موجود في node.js (JavaScript أو CoffeeScript) ، بحيث يمكنك مشاركة أشياء مثل عمليات التحقق من الصحة بين العميل والخادم.
  • ويستخدم websockets ، ولكن يمكن الرجوع إلى المتصفحات القديمة
  • ويركز على التحديثات الفورية للكائن المحلي (أي واجهة المستخدم لاذع) ، مع إرسال التغييرات إلى الخادم في الخلفية. يسمح بالتحديثات الذرية فقط لجعل تحديثات المزج أكثر بساطة. يتم إرجاع التحديثات المرفوضة على الخادم مرة أخرى.
  • كمكافأة ، فإنه يعالج إعادة تحميل رمز الحية بالنسبة لك ، وسيحافظ على حالة المستخدم حتى عندما يتغير التطبيق بشكل جذري.

نيزك بسيط بما فيه الكفاية بحيث أقترح عليك على الأقل إلقاء نظرة على الأفكار لسرقتها.







multi-user