سؤال

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

يجب أن تفرع عن كل اتصال جديد كما عادة أود أن استخدام المواضيع ؟

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

المحلول

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

ما يستحق, وهنا بعض المبادئ التوجيهية العامة:

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

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

نصائح أخرى

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

ومجرد البحث وجدت هذا SO الإجابة: ما هو الغرض من مفترق؟ . من الواضح أنك تعرف الجواب على ذلك، ولكن الجواب رقم 1 في هذا الموضوع ديه نقاط جيدة على مزايا شوكة ().

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

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

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

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

وحمل المصدر المفتوح. لقد وضعت الكثير من العمل في فصل امتياز الحق فقط، انها محمولة، وتم التدقيق فيه للأمن أكثر من أي شيء آخر.

وتكييفه لتلبية الاحتياجات الخاصة بك، وربما كنت يمكن أن يطرح أكثر من ذلك. الامتثال لاتفاقية الترخيص بالطبع. اتبع بقع المستقبلية مع SCC جيد.

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

إذا كنت طموحا حقا، هل يمكن أن تستخدم نوعا من نموذج IO غير مؤمن غير متزامن. أنا أحب Boost.Asio، ولكن أنا الثقيلة في C ++.

تأكد من التعليمات البرمجية معالجة الإشارات بشكل صحيح. HUP لإعادة التكوين. مصطلح لإيقاف بأمان.

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

إذا كنت ترغب في تجنب خيوط / التفرع جميعا، أود أن أوصي باستخدام جميع عدم عرقلة-I / O جنبا إلى جنب مع <لأ href = "http://www.monkey.org/~provos/libevent/" يختلط = "نوفولو noreferrer"> libevent . Libevent معروف جيدا كحل الأداء العالي للبرمجة الحدث مدفوعة.

ACE (C ++ / جافا) . أنه يحتوي على عدد من الخيوط والمفاعلات الحدث، والتفرع TCP التي تعالج متطلبات الاتصالات الخاصة بك. يمكنك أيضا أن ننظر إلى rel="nofollow زيادة اسيو حيث لا شيء على غرار

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