سؤال

ما هي الطريقة الجيدة أن تستمر الدولة عند إعادة تشغيل تحطمت العملية ؟

أنا مشرف في مكتب المدعي العام تطبيق ما ساعات عدة "الفرعي" gen_servers.

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

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

لا تتردد في استخدام mnesia أو ETS لتخزين الدولة بعد كل تحديث بسبب وأضاف التعقيد ؛ هل هناك طريقة أسهل ؟

هل كانت مفيدة؟

المحلول

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

اثنين - أكثر تعقيدا - البدائل:

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

نصائح أخرى

<اقتباس فقرة>   

وهناك طريقة أسهل؟

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

وعلى أي حال أنا لا أرى مشكلة لتخزين دولة في mnesia.

وآسف لغتي الإنجليزية:)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top