سؤال

هل يمكن لشخص ما توجيهني في الاتجاه الصحيح لتعلم كيفية القيام بالشبكات في C#/. Net 3.5؟ عينات الرمز والتفسيرات مرحب بها. في الأساس ، أبحث عن كيفية القيام بنماذج خادم/عميل غير متزامنة/متعددة.

أنا مرتاح إلى حد ما مع الأساسيات في كيفية تحقيق ذلك في C ++ مع Winsock ، لكن على الرغم من أن كل بحثي لا يمكن أن يدرك هذا المفهوم في C#.

شكرا على اي مساعده بامكانك تقديمها :)

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

المحلول

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

TCPCLIENT/UDPCLIENT

هذه توفر غلاف رفيع نسبيا حول مآخذ الكامنة. يوفر بشكل أساسي دفقًا فوق المقبس. يمكنك استخدام أساليب ASYNC على NetworkStream (BeginRead ، وما إلى ذلك). لا أحب هذا واحد لأن الغلاف لا يوفر الكثير ويميل إلى أن يكون أكثر حرجًا من استخدام المقبس مباشرة.

المقبس - حدد

يوفر هذا تقنية SELECT الكلاسيكية لضماط الإرسال المتعدد المقبس IO على مؤشر ترابط واحد. لا ينصح بعد الآن.

مقبس - نمط APM

يعد نموذج البرمجة غير المتزامن (ويعرف أيضًا باسم IaSyncresult ، نمط Begin/End) للمآخذ هي التقنية الأساسية لاستخدام المقابس بشكل غير متزامن. وهناك العديد من المتغيرات. في الأساس ، يمكنك تسمية طريقة غير متزامنة (على سبيل المثال ، BeginReceive) وتفعل واحدة مما يلي:

  1. استطلاع للانتهاء على iasyncresult العائد (بالكاد تستخدم).
  2. استخدم Waithandle من iAsyncresult لانتظار إكمال الطريقة.
  3. تمرير طريقة beginxxx طريقة رد اتصال سيتم تنفيذها عند اكتمال الطريقة.

أفضل طريقة هي #3 لأنها عادة ما تكون الأكثر ملاءمة. عندما تكون في شك ، استخدم هذه الطريقة.

بعض الروابط:

.NET 3.5 مآخذ عالية الأداء

.NET 3.5 قدم نموذجًا جديدًا لمآخذ التزامن التي تستخدم الأحداث. يستخدم نموذج ASYNC "المبسط" (على سبيل المثال ، socket.sendasync). بدلاً من إعطاء رد اتصال ، يمكنك الاشتراك في حدث لإكماله وبدلاً من iAsyncresult ، يمكنك الحصول على SocketAsynceventArgs. والفكرة هي أنه يمكنك إعادة استخدام SocketAsynceventArgs وتسليم الذاكرة المسبقة للمقبس IO. في سيناريوهات الأداء العالي ، يمكن أن يكون هذا أكثر كفاءة في استخدام نمط APM. بالإضافة إلى ذلك ، إذا قمت بتخصيص الذاكرة المسبقة ، فستحصل على بصمة ذاكرة مستقرة ، وجمع القمامة المخفضة ، وثقوب الذاكرة من التعلق وما إلى ذلك. لاحظ أن القلق بشأن هذا يجب أن يكون مجرد اعتبار في سيناريوهات الأداء العالية.

ملخص

بالنسبة لمعظم الحالات ، استخدم طريقة رد الاتصال لأسلوب APM إلا إذا كنت تفضل نمط طريقة SocketAsyncePentargs / Async. إذا كنت قد استخدمت CompletionPorts في Winsock ، فيجب أن تعلم أن كلتا الطريقتين تستخدمان إكمالها تحت الغطاء.

نصائح أخرى

في .NET 3.5 World يجب أن تتعلم بالتأكيد مؤسسة Windows Communication Foundation - .NET Framework للشبكات.

رابط مفيد:

العمليات المتزامنة وغير المتزامنة (في WCF)

يمكنك العثور على معلومات WCF مفيدة على منشورات تصفح Stackoverflow الموسومة مع WCF بطاقة شعار

يعتمد ذلك على ما تريد التركيز عليه.

إذا كنت ترغب في التركيز على الوظيفة وترك السباكة إلى الإطار ، فابدأ مع Windows Communication Foundation.

إذا كنت تبحث عن بناء السباكة الخاصة بك ، فاستخدم System.Net.Sockets.Socket صف دراسي.

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