معالجة الاستثناءات المنظمة مع خادم متعدد الخيوط

StackOverflow https://stackoverflow.com/questions/164372

  •  03-07-2019
  •  | 
  •  

سؤال

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

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

لذلك لدينا هذا:

  • مع سيه:مستخدم واحد فقط من بين 400 مستخدم يحصل على مشكلة في معظم الأعطال
  • بدون سيه:إذا تعرض أي مستخدم لعطل، فسيتأثر جميع المستخدمين البالغ عددهم 400.
  • لكن في بعض الأحيان مع SEH:توقف الخادم، وتأثر جميع المستخدمين الـ 400 والمستخدمين المستقبليين الذين يحاولون الاتصال.
هل كانت مفيدة؟

المحلول

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

نصائح أخرى

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

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

إصلاح الخلل في البرنامج الخاص بك؟;)

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

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