ما هي الطريقة المفضلة للتعامل مع اتصال TCP هذا في C #؟

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

سؤال

لدي تطبيق خادم (Singleton، تطبيق Console .Net بسيط) الذي يتحدث إلى GlobalCache GC-100-12 لغرض توجيه أوامر الأشعة تحت الحمراء. العديد من عملاء Winform للعملاء على الشبكة المحلية يقومون بتنفيذ تطبيق الخادم وإرسال أوامر ASCII إليه. ينتشر تطبيق الخادم هذه الأوامر ASCII هذه ثم ترسلها إلى GC-100-12 عبر اتصال TCP.

سؤالي هو، ما هي أفضل طريقة للتعامل مع هذا الاتصال من وجهة نظر الخادم؟ أستطيع أن أفكر بطريقتين:

  1. إنشاء وفتح Tcpclient جديد لكل طلب فردي. أغلق tcpclient عند الانتهاء من الطلب.

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

أسأل هذا السؤال لأنني أتساءل عن النفقات العامة لإنشاء TCPClient جديد لكل طلب. هل هي عملية باهظة الثمن؟ هل هذه ممارسة سيئة؟

حاليا أنا أفعل # 1، وطباعة نتائج كل انتقال إلى وحدة التحكم. في بعض الأحيان، لا يتم توجيه بعض مهلة الاتصالات والأمر، وأنت أتساءل عما إذا كان ذلك بسبب النفقات العامة لإنشاء TcpConnection جديد في كل مرة، أو إذا كان بسبب شيء آخر.

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

أنا أبحث عن أي نصيحة عامة حول هذا الموضوع. ليس لدي الكثير من الخبرة في العمل مع فئة TCPClient.

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

المحلول

كان لدينا حالة سهيمة لفتح جلسة Telnet لنظام اختيار قديم. وجدنا أن تكلفة فتح اتصال TCP في كل مرة جاء فيها طلبا باهظ الثمن إلى حد ما، وقررنا تطبيق روتين NO-OP للحفاظ على فتح الاتصال. إنه أكثر تعقيدا، ولكن طالما أن نقطة النهاية الخاصة بك لا تحاول خدمة العديد من العملاء عديدة ثم تثبيت اتصال يبدو وكأنه حل قابل للتطبيق.

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

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