Java RMI ve RPC arasındaki fark nedir?


163

Java RMI ve RPC arasındaki gerçek fark nedir?

Bazı yerlerde RMI Nesneleri kullanıyor okudum?


RMIJava düşünüyorum gRPC.Net gibi bir şey ...
Yousha Aleayoub

Yanıtlar:


137

RPC C tabanlıdır ve bu nedenle yapılandırılmış programlama semantiğine sahiptir, diğer taraftan RMI Java tabanlı bir teknolojidir ve nesne yönelimlidir.

RPC ile bir sunucuya dışa aktarılan uzak işlevleri çağırabilirsiniz, RMI'da uzak nesnelere referans alabilir ve yöntemlerini çağırabilir ve ayrıca birçok JVM örneği arasında dağıtılabilen daha uzak nesne referanslarını geçirebilir ve döndürebilirsiniz, bu yüzden çok daha güçlü .

Saf bir istemci-sunucu mimarisinden daha karmaşık bir şey geliştirme ihtiyacı ortaya çıktığında RMI göze çarpmaktadır. Nesneleri bir ağ üzerinden yaymak çok kolaydır, tüm istemcilerin tek tek bağlantıları açıkça saptamak zorunda kalmadan iletişim kurmasını sağlar.


19
Bu yanlış. RPC de Java tabanlıdır. JAX-RPC 1.1, 2.0 ile değiştirildi ve daha sonra JAX-WS olarak yeniden adlandırıldı. Java'da, RPC hakkında konuşurken SOAP ve Web Hizmetleri hakkında konuşuyorsunuz. JAX-RPC 1.1 ile ilgili bir IBM makalesi JAX-WS olarak değişmektedir. ibm.com/developerworks/library/ws-tip-jaxwsrpc
MattC

1
@MattC Bağlandığınız makalenin, bu adın "JAX-RPC" den "JAX-WS" ye değişmesinin nedeninin, bu spesifikasyonun "RPC" den daha fazlasını içerdiği için orijinal adın tam olarak doğru olmadığına dikkat çektiğini düşünüyorum. geleneksel anlamda. Bu nedenle, RPC'nin geleneksel olarak ne anlama geldiğinden bahseden bu cevap hala doğrudur.
xji

2
evet, demek istediğim, RPC'nin C / Unix dünyasından (en azından en yaygın RPC uygulaması, ONCRPC) kaynaklandığı ve bu hesaplama modelinden sonra modellendiği; Tabii ki hiçbir şey onu başka bir programlama dilinin üzerine uygulamayı engellemez
fortran

6
Anlambilimin nasıl kullanıldığına dair biraz fikir farklılığı, bir yanıtı yanlış (ya da yanıltıcı) yapmaz. Bunu okuyan herkes kolayca "C tabanlı" temelde "prosedür odaklı" anlamına anlayabilir - Java öğrenen herkes POP vs OOP farkı bilir.
Navin Israni

bir nodejs istemcisi sunucuda RMI çağrılarını çağırabilir (söyleyebilir)? Böyle bir yol var mı?
Hitesh Bajaj

45

RPC ve RMI arasındaki temel fark, RMI'nin nesneleri içermesidir . Proxy işlevini kullanarak yordamları uzaktan çağırmak yerine, bir proxy nesnesi kullanırız .

RMI ile daha fazla şeffaflık vardır, yani nesnelerin sömürülmesi, referanslar, kalıtım, polimorfizm ve teknoloji dile entegre edildiğinden istisnalar.

RMI, RPC'den daha ileri düzeydedir ve arabirimlerin çalışma zamanında değişebileceği dinamik çağırma ve ek bir soyutlama katmanı sağlayan nesne uyarlaması sağlar.


18

1. Yaklaşım:

RMI, kullanıcının nesneyi ve çağırması gereken nesnenin yöntemini bilmesi gereken nesne yönelimli bir paradigma kullanır.

RPC nesnelerle ilgilenmez. Bunun yerine, önceden kurulmuş olan belirli alt rutinleri çağırır.

2. Çalışma:

RPC ile, yerel bir çağrıya çok benzeyen bir prosedür çağrısı alırsınız. RPC, çağrıyı yerelden uzak bilgisayara geçirmeyle ilgili karmaşıklıkları ele alır.

RMI aynı şeyi yapar, ancak RMI nesneye ve çağrılan yönteme bir başvuru iletir.

RMI = RPC + Nesne yönelimi

3. Daha iyisi:

RMI, RPC'ye kıyasla daha iyi bir yaklaşımdır, özellikle de daha büyük programlarda, bir şeylerin yanlış gidip gitmediğini tanımlamak daha kolay bir kod sağlar.

4. Sistem Örnekleri:

RPC Sistemleri: SUN RPC, DCE RPC

RMI Sistemleri: Java RMI, CORBA, Microsoft DCOM / COM +, SOAP (Basit Nesne Erişim Protokolü)


Uygulamamda JAX-WS'yi sabun hizmetlerini ortaya çıkarmak / tüketmek için kullanıyorum. Buna RPC tipi mekanizma diyebilir miyim? Anladığım kadarıyla, JAX-WS'de, java yansıma API'sını kullanarak uzak yöntemi çağırıyoruz. Yani RPC'nin tanımı ile eşleşmesi. Lütfen onaylayın !
Gunjan Shah

11

Uzaktan Yordam Çağrısı (RPC) , yerel veya uzak makinede bulunan başka bir işlemdeki bir işlevin çağrılmasını sağlayan bir süreçler arası iletişimdir.

Uzaktan yöntem çağırma (RMI) , nesne yönelimli paradigma desteği ile Java'da RPC uygulayan bir API'dir.

  1. RPC'yi çağırmanın bir C prosedürünü çağırmak gibi olduğunu düşünebilirsiniz. RPC, RMI destek yöntemi parametreleri / dönüş türlerini java nesneleri olarak desteklediği ilkel veri türlerini destekler.

  2. RMI, RPC'nin aksine programlamak kolaydır. İş mantığınızı bir dizi ilkel veri türü yerine nesneler olarak düşünebilirsiniz.

  3. RPC, java ile sınırlı olan RMI'dan farklı olarak dil açısından tarafsızdır

  4. RMI, RPC'ye göre biraz daha yavaş

C RPC uygulaması için bu makaleye göz atın


6

RMI veya Uzaktan yöntemi invokation sunucusuna hem gönderme vekil nesneleri (veya koçanları) ancak ince bir fark istemci tarafında RPC çağırır olan RPC ya da istemci uzaktan yordam çağrı çok benzer FONKSİYONLARI vekil işlevi ve RMI çağırır YÖNTEMLERİ yoluyla proxy işlevi. RMI, nesneye yönelik bir RPC versiyonu olduğu için biraz üstün kabul edilir .

Gönderen burada .

Daha fazla bilgi ve örnek için buraya bir göz atın .


5
yöntemi java fonksiyonlar denir, işlev c / c ++ denilen yöntemdir. Peki hala fark nedir?
starcorn

1
Fark, (örnek yöntemleri söz konusu olduğunda), çağıran bir nesnenin olmasıdır. Çağıran nesnenin gönderilmesi (koduyla birlikte) veya kaldırma sunucusunda yaşaması gerekir, ancak yerel sunucuda başvuruda bulunulması için bir yol olması gerekir.
Ellen Spertus

Belirli programlama dillerinin yöntemlere ve işlevlere nasıl davrandığını göz ardı eden edebi anlam, işlevlerin bir değer döndürürken yöntemlerin durumu değiştirmesidir.
Dan

RPC, proxy işlevi aracılığıyla FUNCTIONS işlevini çağırır ve RMI, proxy OBJECT işlevini kullanarak YÖNTEMLERİ çağırır. Sağ?
Noor Nawaz

İstemci normalde 'sunucuya proxy nesneleri (veya saplamaları) göndermez'. Düşük kaliteli alıntı.
Lorne Marquis

6

RPC ve RMI arasındaki tek gerçek fark, RMI ile ilgili nesnelerin bulunmasıdır: Proxy işlevi aracılığıyla işlevleri çağırmak yerine, yöntemleri bir proxy üzerinden çağırırız.


6

RMI ve RPC arasındaki fark şudur:

  • Ad olarak RMI , Uzaktan Yöntem Çağırma'yı gösterir: bir yöntem veya nesne çağırır. Ve
  • RPC bir işlevi çağırır.

2
A methodile a arasında dolaylı olarak vurguladığınız ancak netleştirmediğiniz farklılıklar nelerdir function? Java'da hiçbir işlevleri yoktur ... ama OOP kadarıyla Hatırladığım kadarıyla, bunlar eş, ve bu yüzden vardır invocationve call.
dakika

RPC bir prosedürü / işlevi başlatır - düz olarak.
Foo

3

RPC , C'ye dayalı eski bir protokoldür. Uzak bir prosedürü çağırabilir ve yerel bir çağrı gibi görünmesini sağlayabilir.RPC, bu uzaktan çağrıyı sunucuya geçirmenin ve sonucu istemciye almanın karmaşıklıklarını işler.

Java RMI da aynı şeyi elde eder ama biraz farklıdır.Uzak nesneler için referanslar kullanır.Bu nedenle, uzak nesneye çağrılacak yöntemin adıyla birlikte bir referans göndermesi daha iyidir çünkü daha iyi sonuç verir. büyük programlar durumunda kod ve aynı zamanda nesnelerin ağ üzerinden dağıtımı, birden çok istemcinin her bağlantıyı tek tek kurmak yerine sunucudaki yöntemleri çağırmasını sağlar.


Özellikle hangi protokol "RPC" dir? Bildiğim kadarıyla RPC için iki düzine protokol ve Java için mevcut olanların yarısı var.
foo

@foo Şüphesiz Sun-RPC'ye atıfta bulunuyor, ancak tüm RPC'ler Uzaktan Yordam Çağrısı, nO nesneleri veya yöntemleri anlamına geliyor, bu yüzden gerçekten alakalı değil.
Lorne Marquis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.