RMI مقابلخدمات الويب.ما هو أفضل بالنسبة Java2Java الاتصال عن بعد?

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

سؤال

أنا جديدة على كل خدمات الويب و RMI و أتسائل من الذي هو أفضل طريقة للقيام الاتصال عن بعد بين مختلف التطبيقات على شبكة الإنترنت عندما تكون هذه الطلبات هي كل ما مكتوب في جاوة ، هذا هو عندما لغات البرمجة المختلفة لا يهم (الذي من شأنه أن يكون ميزة WS).

بينما من ناحية أعتقد أن هناك أداء النفقات العامة عند استخدام "خدمات ويب" (هل من أحد لديه بعض الأرقام تثبت ذلك؟), من ناحية أخرى يبدو لي أن خدمات الويب هي أكثر المتباعدة و يمكن استخدامها لتنفيذ أكثر service-oriented architecture (SOA) (والتي لم يكن ممكنا مع RMI, أليس كذلك؟).

على الرغم من أن هذا هو تماما العامة السؤال ، ما هو رأيك ؟

شكرا

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

المحلول

خدمات ويب تسمح العمارة المتباعدة.مع RMI, لديك للتأكد من أن تعريفات فئة البقاء على وفاق في جميع مثيلات التطبيق ، وهو ما يعني أن لديك دائما على نشر كل منهم في نفس الوقت حتى لو كان واحد منهم فقط هو تغيير (ليس بالضرورة ، وإنما هو مطلوب في كثير من الأحيان بسبب المسلسل UUIDs وغيرها)

كما أنها ليست قابلة للغاية ، والتي قد يكون مشكلة إذا كنت تريد أن يكون لها موازنات التحميل.

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

نصائح أخرى

إذا كنت تستخدم خدمات ويب أو أكثر "الأم" نهج يعتمد على البيئة أيضا.إذا كان لديك لتمرير من خلال وكيل أو جدار الحماية للشركات(s), خدمات ويب من المرجح أن تعمل لأنها تعتمد على HTTP فقط.RMI يتطلب منك فتح منفذ آخر على التطبيق الخاص بك التي قد يكون من الصعب (وليس من الناحية الفنية ، على الرغم من) في بعض البيئات...

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

الأداء يعتمد على البيانات التي كنت تخطط الصرف.إذا كنت ترغب في إرسال كائن معقد شبكات من تطبيق واحد إلى آخر ، ربما أسرع مع RMI, لأنه نقلها في تنسيق ثنائي (عادة).إذا كان لديك نوع من النصوص/XML المحتوى على أي حال, خدمات ويب قد يكون معادلا أو حتى أسرع ، ومنذ ذلك الحين لا تحتاج إلى تحويل أي شيء على الإطلاق (الاتصالات).

HTH,
مارتن

الشيء الوحيد الذي تفضل WS على RMI WS يعمل على منفذ HTTP 80/443 التي عادة ما يتم حظره في جدران الحماية ، يمكن أن تعمل NAT.... الخRMI بكثير المعقدة الكامنة بروتوكول شبكة الاتصال الذي يتطلب منك أن تفتح RMI الموانئ, و أيضا قد لا تعمل إذا كان العميل هو NATTED.ثانيا مع RMI أنت الحد من slef جافا-جافا التواصل مع Webservies لا يوجد مثل هذا التقييد.فمن الأسهل بكثير أن التصحيح Webservices على سلك البيانات هو الصابون/HTTP , والتي يمكن بسهولة التقاط طريق استنشاق أدوات التصحيح.أنا لا أعرف من وسيلة سهلة للقيام بذلك على RMI.إلى جانب جزر مارشال هو فعلا قديم جدا و لم تلقى الكثير من الاهتمام في السنوات القليلة الماضية.كان كبير مرة أخرى في الأيام عندما كوربا كان كبير كل من جمهورية جزر مارشال كوربا حقا تقنيات عتيقة.الخيار الأفضل هو بقية نمط Webservices.

تجربتي مع RMI و خدمات الويب المرايا التخمينات الخاصة بك أعلاه.في عام ، RMI أداء يفوق بكثير خدمات الويب, ولكن واجهة مواصفات صراحة لخدمات الويب.

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

RMI قد يكون من الأفضل الاتجاه إذا كنت في حاجة للحفاظ على حالة معقدة.

@مارتن Klinke

"الأداء يعتمد على البيانات التي كنت تخطط الصرف.إذا كنت ترغب في إرسال كائن معقد شبكات من تطبيق واحد إلى آخر ، ربما أسرع مع RMI, لأنه نقلها في تنسيق ثنائي (عادة).إذا كان لديك نوع من النصوص/XML المحتوى على أي حال, خدمات ويب قد يكون معادلا أو حتى أسرع ، ومنذ ذلك الحين لا تحتاج إلى تحويل أي شيء على الإطلاق (الاتصالات)."

بقدر ما أعرف مشكلة الأداء يجعل الفرق خلال التسلسل-إلغاء التسلسل وبعبارة أخرى التنظيم-demarshalling العملية.أنا غير متأكد من كل هذه الشروط هي نفسها راجع للشغل في توزيع البرمجة,أنا لا أتحدث عن العملية التي يحدث في نفس JVM ، هو حول كيفية نسخ البيانات.فهو إما تمر قيمة أو تمر عن طريق الإشارة.تنسيق ثنائي يتوافق مع تمر قيمة مما يعني نسخ كائن الملقم البعيد في الثنائيات.إذا كان لديك أي شك حتى الآن أنا أحب أن أسمع

ما الفرق بين إرسال في تنسيق ثنائي والنصي/xml المحتوى من حيث التنظيم-demarshalling أو التسلسل-إلغاء التسلسل?

أنا فقط أعتقد أننا.انها لا تعتمد على أي نوع من البيانات التي ترسلها.ما نوع البيانات التي ترسلها ستكون جزءا من التنظيم-demarshalling العملية و في النهاية سيتم إرسالها في ثنائيات صحيح ؟

هتافات حقي

ماذا عن الربيع عن بعد.فهو يجمع بين الراحة مثل بروتوكول HTTP مع تنسيق ثنائي من جمهورية جزر مارشال.يعمل تماما بالنسبة لي.

كما الربيع المتعصب و داعية من SOA لسنوات عديدة أنصح الربيع عن بعد.هذا نكهة خدمة مصدر سوف تفعل خدعة RMI.

org.springframework.remoting.rmi.RmiServiceExporter

النقل الأخرى هي بالطبع المتاحة.فإن التسلسل شيء وله قابلية للإدارة إذا كنت الإصدار الخاص بك واجهات (نهاية نقطة) DTOs معقول و إدارة التسلسل UUIDs بشكل صحيح.نحن postfix 'ألفا', 'برافو' لدينا واجهات والأشياء الزيادة ، تنقيص & اختراع ومكان.نحن أيضا إصلاح لدينا التسلسل UUIDs 1 وضمان التغييرات فقط addative ، وإلا ننتقل من القول ، 'برافو' إلى 'تشارلي'.كل قابلية للإدارة في مؤسسة الإعداد.

عن الربيع عن بعد (أنا خمنت تعني HTTP المنادي) ، سواء من جانب استخدام الربيع ، إذا كان هذا هو الحال فإنه يمكن مناقشتها.

بالنسبة جافا جافا تطبيق RMI جيد solutionö, جاكس-RPC أو جاكس-WS جافا إلى جافا الاتصالات ينبغي تجنبها إذا كان العملاء ليست تحت التحكم الخاصة بك أو قد الانتقال إلى منصة أخرى.

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