سؤال

أنا أبحث في ربط بعض التطبيقات معًا (كلها مكتوبة بلغات مختلفة مثل C#و C ++ و Python) ولست متأكدًا من كيفية القيام بذلك.

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

يبدو أن المآخذ أو ربما يكون الصابون حلاً عالميًا ولكنه أراد فقط الحصول على بعض الآراء حول ما يفكر فيه الناس في هذا الموضوع.

سيتم تقدير التعليقات/الاقتراحات ، شكرًا!

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

المحلول

أنا شخصياً أعجبني Ømq. إنها مكتبة تحتوي على واجهة مألوفة تشبه BSD-Sockets لتمرير الرسائل ، ولكن ستجدها تنفذ أنماطًا مثيرة للاهتمام لتوزيع المهام.

يبدو أنك تريد ترتيب عدة عمليات في خط أنابيب. يتيح لك Ømq القيام بذلك باستخدام مآخذ الدفع والاستطلاع. (وبعد ذلك ، ستجد أنه من الممكن التوسع في عمليات وآلات متعددة مع القليل من الجهد.) ألقِ نظرة على يرشد للبدء ، و ZMQ_Socket (3) MinPage خصيصًا لكيفية عمل الدفع والسحب.

الروابط متاحة لجميع اللغات التي ذكرتها.

أما بالنسبة لمحتويات الرسالة ، فإن Ømq لا يهمها ذلك ، فهي مجرد كتل من البيانات الأولية. يمكنك استخدام أي تنسيق يناسبك ، مثل JSON ، أو ربما المخازن المؤقتة البروتوكول.

ما لست متأكدًا منه هو "الحالة المسيطرة" التي ذكرتها. هل أنت مهتم ، على سبيل المثال ، بإلغاء وظيفة في منتصف الطريق؟

نصائح أخرى

من أجل C# إلى C# يمكنك استخدام مؤسسة Windows Communication Foundation. قد تكون قادرًا على استخدامه مع Python و C ++ أيضًا.

قد ترغب أيضًا في الخروج من الأنابيب المسمى.

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

يعاني معظم البرامج الخارجية من صعوبة في الارتباط مع كود C ++ ، نظرًا لخوارزمية تنسيق الأسماء التي يستخدمها لرموزها. لهذا السبب ، عند التواصل مع البرامج المكتوبة بلغات أخرى ، غالبًا ما يكون من الأفضل إعلان الأغلفة للأشياء extern "C" أو داخل extern "C" { الكتلة.

يجب أن أكون قادرًا على نقل مجموعة بيانات من تطبيق إلى آخر بسهولة (مجموعة البيانات المعنية ليست ضخمة ، وربما بضعة ميغابايت)

استخدم نظام الملفات.

وأنا بحاجة أيضًا إلى بعض أشكال الطريق للسيطرة على الوضع الحالي للعملية

مرة أخرى ، استخدم نظام الملفات. يعد ملف "current_state.json" مع كائن تسلسلي JSON مثاليًا للغات المتعددة للعمل معه.

يبدو أن المآخذ أو ربما الصابون سيكون حلاً عالميًا.

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

هناك العديد من الطرق للقيام بالتواصل بين الفرضية. كما قلت ، قد تكون المقابس حلاً عالميًا. الصابون ، على ما أعتقد ، هو إلى حد ما المبالغة. يمكنك أيضًا استخدام Mailslots. كتبت تطبيق C ++ باستخدامه قبل عامين. يمكن أن تكون الأنابيب المسماة أيضًا حلاً ، ولكن إذا كنت ترميز على Windows ، فقد يكون الأمر صعبًا.

فى رايى:

  1. مآخذ
  2. Mailslots

هم أفضل المرشحين.

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