معلمات المستخدم وساعات Lamport والأساليب الرسمية خفيفة الوزن

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

في Airspace Intelligence ، نعمل على المنتجات التي تدعم عمليات شركات الطيران. أحد المنتجات التي نبنيها هو تطبيق مراسلة بين المرسلين (الطاقم الأرضي الذي ينسق طائرات الناقل) والطيارين (الأشخاص الذين يقودون الطائرات). فكر في WhatsApp للطائرات.

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

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

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

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

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

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

يمكنك إضافة عدد صحيح تزداد في كل مرة تقوم فيها بالمزامنة أو تغيير الحالة ، واختيار الأكبر ... انتظر ، يبدو أنك تقوم بإعداده ...

الفكرة بسيطة: اجعل كل عملية تحافظ على وقتها ومزامنة الوقت عندما تتبادل العمليات (المتصفحات والخلفية) الأحداث.

الأحداث تحدد الوقت. عند حدوث حدث ، مثل تغيير المعلمة ، تزيد العملية من وقتها المحلي (عدد صحيح). عندما تتبادل العمليات المعلومات ، فإنها تمر على العداد ، وتقارن العداد المستلم مع العداد المحلي ، واختيار la ...

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

في Airspace Intelligence ، نعمل على المنتجات التي تدعم عمليات شركات الطيران. أحد المنتجات التي نبنيها هو تطبيق مراسلة بين المرسلين (الطاقم الأرضي الذي ينسق طائرات الناقل) والطيارين (الأشخاص الذين يقودون الطائرات). فكر في WhatsApp للطائرات.

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

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

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

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

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

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

يمكنك إضافة عدد صحيح تزداد في كل مرة تقوم فيها بالمزامنة أو تغيير الحالة ، واختيار الأكبر ... انتظر ، يبدو أنك تقوم بإعداده ...

الفكرة بسيطة: اجعل كل عملية تحافظ على وقتها ومزامنة الوقت عندما تتبادل العمليات (المتصفحات والخلفية) الأحداث.

الأحداث تحدد الوقت. عند حدوث حدث ، مثل تغيير المعلمة ، تزيد العملية من وقتها المحلي (عدد صحيح). عندما تتبادل العمليات المعلومات ، فإنها تمر على العداد ، وتقارن العداد المستلم مع العداد المحلي ، واختيار la ...

What's Your Reaction?

like

dislike

love

funny

angry

sad

wow