سؤال

بلدي C# الطبقة يجب أن تكون قادرة على معالجة كميات كبيرة من الأحداث الواردة عبر tcp تيار أسلوب اتصال مأخذ التوصيل.حجم الحدث الرسائل الواردة من tcp خادم من قبل الطبقة مأخذ متغير تماما.على سبيل المثال, في بعض الأحيان أنها سوف تتلقى رسالة الحدث في الفترة من عشر ثوان و في أوقات أخرى سوف تتلقى ستين رسائل الأحداث في الثانية.

أنا باستخدام المقبس.ReceiveAsync لتلقي الرسائل.ReceiveAsync ترجع صحيح إذا كان تلقي العملية معلقة أو false إذا كان هناك بالفعل البيانات على السلك تتلقى إكمال العملية بشكل متزامن.إذا كانت العملية معلقة ، المقبس اتصل رد على IO الانتهاء الموضوع ، وإلا أدعو بلدي رد الحالي (IOC) موضوع.وعلاوة على ذلك, مختلطة مع رسائل الحدث كما تلقي الردود على الأوامر التي تم إرسالها إلى tcp هذا الخادم.رسائل الاستجابة يتم معالجتها على الفور ؛ بشكل فردي من قبل بإطلاق threadpool عامل.

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

معالج الحدث رسائل فقط تحتاج إلى نسخ الرسالة العازلة إلى كائن, رفع الحدث ثم حرر رسالة العازلة العودة الى الحلبة-تجمع المخزن المؤقت.لذا سؤالي هو ما رأيك هو أفضل استراتيجية لتحقيق هذا الهدف ؟

هل تحتاجون إلى المزيد من المعلومات ؟ اسمحوا لي أن أعرف.شكرا!!

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

المحلول

أنا لن أسمي 60 الأحداث في الثانية ارتفاع حجم.هذا المستوى المنخفض من النشاط أي مأخذ طريقة المعالجة في يكون على ما يرام.لقد عالجت 5,000 الأحداث في الثانية على موضوع واحد باستخدام الأجهزة أنه أقل قدرة من الأجهزة الحالية, فقط باستخدام حدد.

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

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