إرلانج مقابل العالم الحقيقي/الخارجي، كيفية التواصل؟

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

سؤال

أنا أتعلم لغة إرلانج وأنا مفتون جدًا بقاعدة بيانات الذاكرة.أرغب في إنشاء بعض تطبيقات العالم الحقيقي في C# / F# باستخدام erlang كواجهة خلفية.

أبحث عن حل جيد للتواصل مع عقد إرلانج من العالم الخارجي.

ما وجدته حتى الآن:

(أ) OTP.net, ، مكتبة .net مفتوحة المصدر تنفذ بروتوكول اتصال erlang "الأصلي".

المشاكل هنا:

  • المكتبة ليست ناضجة جدًا
  • لا أحب نموذج الكائن المنقول من Java (عدد كبير جدًا من النسخ المتماثلة الدقيقة تقريبًا لفئات BCL)
  • لا أحب استخدام نموذج الترابط للاتصالات.
  • مطلوب العديد من منافذ TCP المفتوحة
  • نقص الحماية

(ب) استخدم المنافذ/المآخذ في إرلانج وتنفيذ بروتوكول مخصص.

المشاكل هنا:

  • ليس لدي أي خبرة
  • من الصعب الحفاظ عليه/التوسيع للإصدارات المستقبلية

هل لديك أي نصيحة، خبرة في هذا الموضوع؟

هل يجب أن أعمل على مكتبة OTP.net لتتناسب مع احتياجاتي أم أحاول تنفيذ بروتوكول جديد من الصفر؟

ماذا عن حل JSON أو REST؟هل هناك أي مكتبة إرلانج من شأنها أن تفي بالغرض؟

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

المحلول

يعد حل المنفذ/المقبس فكرة جيدة وليس صعبًا كما قد يبدو. المخازن المؤقتة لبروتوكول جوجل هو فقط ما تحتاجه.إنه سهل الاستخدام للغاية وفعال وقابل للصيانة.يحتوي على تطبيقات لـ C#، وerlang، وjava، وpython وغيرها الكثير (انظر لغات اخرى و دليل المطور)

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

وميزة هذا النهج هو أنه:

  1. يمكنك بسهولة تمديد وتغيير البروتوكول في المستقبل
  2. إنه أكثر كفاءة بكثير من نهج الراحة
  3. يتم استخدامه حاليا من قبل Google ل تقريبا كل RPC الداخلية البروتوكولات وتنسيقات الملفات

نصائح أخرى

إذا كنت تريد تنفيذ REST API في Erlang، فهناك شيء واحد فقط عليك القيام به.استخدم الممتاز مجموعة موتشي ويب لإنشاء خادم HTTP الخاص بك والذي ينفذ البروتوكول الخاص بك.

لا داعي للذعر، فهو في الواقع أسهل مما قد يبدو.

هناك عدد من البرامج التعليمية حول كيفية القيام بذلك بما في ذلك أ مجموعة تسجيل الشاشة من المبرمجين البراغماتيين.

لأنه يأتي مع مجموعة كاملة من مكتبات json، لذلك ستكون على ما يرام!

بالتأكيد، يمكنك القيام بـ REST مع Erlang، انظر على سبيل المثال. http://www.infoq.com/articles/vinoski-erlang-rest - إذا كان REST مناسبًا لاحتياجات تطبيقاتك، فهو أسلوب ممتاز.(ستعقد Pycon Italia Tre، الأسبوع المقبل في فلورنسا، جلسات حول التعاون بين Erlang/Python، راجع www.pycon.it إذا كنت بالقرب من توسكانا؛-).

هنالك أيضا مكتبة جيسون بالنسبة لـ Erlang، والتي قد ترغب في الاطلاع عليها.لم أستخدمه، لذلك لا أستطيع أن أقول أي شيء عنه من خلال التجربة.

على الرغم من أنني أوافق على أن بعض حلول REST مفيدة، سواء كنت تستخدم Yaws أو Mochikit، فستجد نفسك تحاول تحديد بعض "اللغة" الوسيطة من أجل إنشاء استعلامات يمكن لـ Mnesia معالجتها.

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

ثم مرة أخرى يمكنك دائمًا تجربة CouchDB.

نقوم بذلك باستخدام YAWS وتنفيذ طلب/استجابة http بسيط من جانب العميل.يقوم تطبيق YAWS ببساطة بتفويض المكالمة إلى عملية gen_server المناسبة بعد استخراج الوسائط.

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

بعض الإيجابيات إذا كان الأداء الأولي للبروتوكول لا يشكل مشكلة كبيرة:

  • يمكنك ربط نموذج الأمان (HTTPS أو المصادقة)
  • يمكنك الاتصال بواجهة برمجة التطبيقات (API) من أي شيء يمكنه تقديم طلب ويب (كان لدينا الكثير من أكواد Perl القديمة وأوراق Excel المعلقة - وكان فرزها أمرًا تافهًا)

لقد قمنا منذ ذلك الحين بإعادة كتابة OTP.NET

هذه المكتبة أكثر نضجا عدة مرات ، حيث تمت إعادة كتابتها من البداية ل .NET / CLR ، (على عكس سابقتها التي تم تحويلها للتو من Java)

نلقي نظرة على هذا المنصب:

http://blog.aumcode.com/2013/10/nfx-native-interoperability-of-net-with.html

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