كيف يتم إنشاء تطبيقات جانب الخادم ، كيف يتم اتصال العميل - الخادم؟

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

سؤال

أرغب في الحصول على تطبيق خادم عميل مكتوب في .NET والذي من شأنه أن يفعل ما يلي:

  • يعمل الخادم على تشغيل Linux
  • يوجد على الخادم قاعدة بيانات SQL (MySQL) التي تحتوي على عناوين URL المستند

ما نريده: - سوف يزحف جانب الخادم بانتظام جميع عناوين URL وإنشاء فهرس نص كامل لهم - سيكون جانب العميل قادرًا على إجراء استعلام في هذا الفهرس باستخدام واجهة المستخدم الرسومية

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

نود استخدام C# لجانب الخادم أيضًا ، لكن ليس لدينا خبرة في هذا المجال. كيف تتم أشياء مثل هذه عادة؟


توضيح السؤال الآن بناءً على بعض الإجابات:

الشيء الأكثر وضوحًا بالنسبة لي هو كيف يتم التعامل مع اتصال عميل خادم العميل عادة. هل عادةً ما يستخدم العميل والخادم مآخذ أو رعاية تفاصيل مثل عناوين IP أو المنافذ أو NAT Traversal؟ أم أن هناك بعض الأطر المشتركة والمعاقين ، والتي من شأنها أن تجعل هذا الشفافة ، وجعل رسائل خادم العميل أو إجراء إجراءات سهلة؟ أي أمثلة أو نقاط انطلاق جيدة لهذا؟ هل هناك بعض التقنيات الشائعة كيفية التعامل مع حقيقة أن خادم واحد مطلوب لخادم العديد من العملاء في نفس الوقت؟

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

المحلول

لاستخدام C# على Linux ستحتاج إلى استخدامها كثرة الوحيدات. هذا هو تطبيق مفتوح المصدر لمواصفات CLR.

بعد ذلك ، عليك أن تقرر كيفية التواصل بين الخادم والعميل ، من أدنى مستوى لفتح مجرد مقبس TCP/IP وإرسال البتات لأعلى ولأسفل ، إلى .NET Remoting ، إلى WCF ، لفضح خدمات الويب على الخادم. لا أعرف كيف يكون تنفيذ WCF Compeat على أحادي ، وأعتقد أيضًا أنك قد تواجه مشكلة مع جهاز التحكم عن بعد الثنائي بين Mono و MS .NET.

أود أن أقترح خدمات الويب الخاصة بـ RPC على حل جيد جدًا. تتمتع WebServices أيضًا بميزة العملاء من منصات أخرى للاتصال بسهولة.

تعديلردا على توضيح السؤال. أود أن أقترح استخدام Mono/ASP.NET/WebServices على الخادم ، إذا كنت ترغب في استخدام C# على كل من الخادم والعميل.

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

Mono تسمح بتنفيذ C# (تم تجميعها إلى IL) على مربع Linux. يتيح لك Mono ASP.NET استخدام ASP.NET القياسي والتكامل في Apache See http://www.mono-project.com/asp.net وأخيراً ، تتيح لك خدمات الويب التواصل بقوة بطريقة مكتوبة بقوة بين عميلك وخادمك.

إن استخدام هذا النهج ينفي معظم المشكلات التي أثيرت في توضيحك ويجعلها مشكلة شخص آخر.
مآخذ/SSL - يتم الاعتناء به بواسطة وقت تشغيل .NET القياسي على العميل وأباش على الخادم.
ipaddress/المنافذ/nat traversal - يتم الاعتناء بها. سوف تنظر إلى DNS الحصول على خوادم IP. سيسمح Open Socket للخادم بالرد من خلال أي جدار حماية وإعداد NAT.
عملاء متعددين - تم تصميم Apache للتعامل مع العديد من العملاء معالجة في نفس الوقت كما هو ASP.NET ، لذلك يجب ألا تواجه أي مشاكل هناك.

نصائح أخرى

كما ذكر الكثيرون بالفعل ، هناك عدد من الأشياء التي ذكرتها والتي ستسبب لك الألم. لن أذهب إلى هؤلاء ، بدلاً من ذلك سأجيب على سؤالك الأصلي حول الاتصال.

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

قام .NET Framework بإنشاء دعم لخدمات الويب التي يمكن أن يطلق عليها عميلك بالتأكيد. تشير نظرة موجزة على موقع Mono على موقع Mono إلى أن لديها دعمًا لخدمات الويب أيضًا ، لذا فإن كتابة الخادم الخاص بك في C# وتشغيله تحت Mono يجب أن يكون جيدًا. يعرض Googling لـ "C# Web Service Tutorial" العديد من المواقع التي لديها معلومات حول كيفية البدء ، إليك اختيار عشوائي من تلك النتائج:

http://www.codeguru.com/csharp/csharp/cs_webservices/tutorials/article.php/c5477

القي نظرة على الجراد: "مع Grasshopper ، يمكنك استخدام بيئة التطوير المفضلة لديك من Microsoft® لنشر التطبيقات على منصات تدعم JAVA مثل Linux"

أو انظر هنا

تقوم IDEEA بتحويل تطبيقك إلى Java ثم تشغيله على Tomcat أو JBoss.

نهج آخر: استخدم وحدة mod_aspdotnet لـ Apache ، كما هو موضح هنا.

هذه تطبيق دردشة العميل/الخادم الأساسي في C# يبدو وكأنه نوع من المثال الذي قد يكون نقطة انطلاق بالنسبة لي. فصول .NET ذات الصلة TCPClient و tcplistener

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