Apa perbedaan antara Java RMI dan RPC?

163

Apa perbedaan sebenarnya antara Java RMI dan RPC?

Saya telah membaca di beberapa tempat bahwa RMI menggunakan Objek?

Aran
sumber
Saya pikir RMIdi Jawa adalah sesuatu seperti gRPCdi .Net ...
Yousha Aleayoub

Jawaban:

137

RPC berbasis C, dan karena itu memiliki semantik pemrograman terstruktur, di sisi lain, RMI adalah teknologi berbasis Java dan berorientasi objek.

Dengan RPC Anda dapat memanggil fungsi jarak jauh yang diekspor ke server, di RMI Anda dapat memiliki referensi ke objek jarak jauh dan memanggil metode mereka, dan juga meneruskan dan mengembalikan lebih banyak referensi objek jarak jauh yang dapat didistribusikan di antara banyak contoh JVM, jadi jauh lebih kuat .

RMI menonjol ketika kebutuhan untuk mengembangkan sesuatu yang lebih kompleks daripada arsitektur client-server murni muncul. Sangat mudah untuk menyebar objek melalui jaringan yang memungkinkan semua klien untuk berkomunikasi tanpa harus membuat koneksi individu secara eksplisit.

fortran
sumber
19
Ini salah. RPC juga berbasis Java. JAX-RPC 1.1 digantikan oleh 2.0, yang kemudian diganti namanya menjadi JAX-WS. Di Jawa, ketika Anda berbicara tentang RPC, Anda berbicara tentang SOAP dan Layanan Web. Berikut ini adalah artikel IBM tentang JAX-RPC 1.1 yang berubah menjadi JAX-WS. ibm.com/developerworks/library/ws-tip-jaxwsrpc
MattC
1
@MattC Saya pikir artikel yang Anda tautkan menunjukkan bahwa alasan perubahan nama ini dari "JAX-RPC" menjadi "JAX-WS" adalah persis bahwa nama aslinya tidak akurat, karena spesifikasi ini melibatkan lebih dari sekadar "RPC" dalam pengertian tradisional. Jadi jawaban ini, yang berbicara tentang apa artinya RPC secara tradisional, masih benar.
xji
2
ya, apa yang saya maksudkan adalah bahwa RPC berasal dari dunia C / Unix (setidaknya implementasi RPC yang paling umum, ONCRPC) dan dengan demikian dimodelkan setelah model perhitungan itu; tentu saja tidak ada yang mencegah untuk mengimplementasikannya di atas bahasa pemrograman lainnya
fortran
6
Sedikit perbedaan pendapat tentang cara semantik digunakan tidak membuat jawaban salah (atau menyesatkan). Siapa pun yang membaca ini dapat dengan mudah memahami bahwa "berbasis C" pada dasarnya berarti "berorientasi prosedur" - Siapa pun yang telah mempelajari Java mengetahui perbedaan POP vs OOP.
Navin Israni
dapat klien nodejs (katakanlah) memohon panggilan RMI di server? Apakah ada cara seperti itu?
Hitesh Bajaj
45

Perbedaan utama antara RPC dan RMI adalah bahwa RMI melibatkan objek . Alih-alih memanggil prosedur secara jarak jauh dengan menggunakan fungsi proxy , kami malah menggunakan objek proxy .

Ada transparansi yang lebih besar dengan RMI, yaitu karena eksploitasi objek, referensi, pewarisan, polimorfisme, dan pengecualian karena teknologi diintegrasikan ke dalam bahasa.

RMI juga lebih maju daripada RPC, memungkinkan untuk doa dinamis , di mana antarmuka dapat berubah saat runtime, dan adaptasi objek , yang menyediakan lapisan abstraksi tambahan.

Humphrey Bogart
sumber
18

1. Pendekatan:

RMI menggunakan paradigma berorientasi objek di mana pengguna perlu mengetahui objek dan metode objek yang perlu ia panggil.

RPC tidak berurusan dengan objek. Alih-alih, ia memanggil subrutin tertentu yang sudah ada.

2. Bekerja:

Dengan RPC, Anda mendapatkan panggilan prosedur yang terlihat sangat mirip dengan panggilan lokal. RPC menangani kompleksitas yang terlibat dengan meneruskan panggilan dari lokal ke komputer jarak jauh.

RMI melakukan hal yang sama, tetapi RMI memberikan referensi ke objek dan metode yang dipanggil.

RMI = RPC + Orientasi objek

3. Lebih baik:

RMI adalah pendekatan yang lebih baik dibandingkan dengan RPC, terutama dengan program yang lebih besar karena menyediakan kode yang lebih bersih yang lebih mudah untuk mengidentifikasi jika ada kesalahan.

4. Contoh Sistem:

Sistem RPC: SUN RPC, DCE RPC

Sistem RMI: Java RMI, CORBA, Microsoft DCOM / COM +, SOAP (Protokol Akses Objek Sederhana)

Dhaval Simaria
sumber
Dalam aplikasi saya, saya menggunakan JAX-WS untuk mengekspos / mengkonsumsi layanan sabun. Bisakah saya menyebutnya mekanisme tipe RPC? Sesuai pemahaman saya, di JAX-WS, kami menggunakan metode jarak jauh menggunakan API java refleksi. Jadi itu cocok dengan definisi RPC. Mohon konfirmasi!
Gunjan Shah
11

Remote Procedure Call (RPC) adalah komunikasi antar proses yang memungkinkan memanggil fungsi dalam proses lain yang berada di mesin lokal atau jarak jauh.

Doa metode jarak jauh (RMI) adalah API, yang mengimplementasikan RPC di java dengan dukungan paradigma berorientasi objek.

  1. Anda dapat menganggap memohon RPC seperti memanggil prosedur C. RPC mendukung tipe data primitif sedangkan RMI mendukung parameter metode / mengembalikan tipe sebagai objek java.

  2. RMI mudah diprogram tidak seperti RPC. Anda dapat memikirkan logika bisnis Anda dalam hal objek, bukan urutan tipe data primitif.

  3. RPC adalah bahasa netral tidak seperti RMI, yang terbatas pada java

  4. RMI sedikit lebih lambat untuk RPC

Lihat artikel ini untuk implementasi RPC di C

Ravindra babu
sumber
6

RMI atau Remote Method Invokation sangat mirip dengan panggilan RPC atau Remote Procedure di mana klien mengirim objek proxy (atau bertopik) ke server namun perbedaannya adalah bahwa RPC sisi klien meminta FUNGSI melalui fungsi proxy dan RMI memanggil METODE melalui fungsi proxy. RMI dianggap sedikit lebih unggul karena merupakan versi berorientasi objek dari RPC.

Dari sini .

Untuk informasi dan contoh lebih lanjut, lihat di sini .

Kyle Rosendo
sumber
5
metode adalah fungsi apa yang disebut dalam java, fungsi adalah metode apa yang disebut dalam c / c ++. Jadi tetap apa bedanya?
starcorn
1
Perbedaannya adalah bahwa (dalam kasus metode instance), ada objek yang memohon. Objek yang memohon harus dikirim (beserta kodenya) atau perlu hidup di server hapus tetapi memiliki cara untuk direferensikan di server lokal.
Ellen Spertus
Mengabaikan bagaimana bahasa pemrograman tertentu memperlakukan metode vs fungsi, makna sastra adalah bahwa fungsi mengembalikan nilai sedangkan metode memodifikasi keadaan.
Dan
RPC memanggil FUNGSI melalui fungsi proxy dan RMI memanggil METODE menggunakan proxy OBJECT. Baik?
Noor Nawaz
Klien biasanya tidak 'mengirim objek proxy (atau bertopik) ke server'. Kutipan berkualitas buruk.
Marquis of Lorne
6

Satu-satunya perbedaan nyata antara RPC dan RMI adalah bahwa ada objek yang terlibat dalam RMI: alih-alih menjalankan fungsi melalui fungsi proxy, kami memanggil metode melalui proxy.

jiby
sumber
6

Perbedaan antara RMI dan RPC adalah:

  • RMI seperti namanya menunjukkan Remote Method Invoking: memanggil metode atau objek. Dan
  • RPC menjalankan fungsi.
sis
sumber
2
Apa perbedaan yang secara implisit Anda tekankan, tetapi tidak jelaskan, antara a methoddan a function? Di Jawa tidak ada fungsi ... tetapi dalam OOP sejauh yang saya ingat, mereka adalah sinonim, dan begitu juga invocationdan call.
mnt
RPC menjalankan prosedur / fungsi - flat out.
foo
3

RPC adalah protokol lama berdasarkan C.Ini dapat memanggil prosedur jarak jauh dan membuatnya tampak seperti panggilan lokal. RPC menangani kerumitan menyampaikan permintaan jarak jauh itu ke server dan mendapatkan hasilnya kepada klien.

Java RMI juga mencapai hal yang sama tetapi sedikit berbeda. Ia menggunakan referensi ke objek jarak jauh . Jadi, yang dilakukannya adalah mengirimkan referensi ke objek jarak jauh bersamaan dengan nama metode yang dipanggil. Lebih baik karena menghasilkan pembersih kode jika ada program besar dan juga distribusi objek melalui jaringan memungkinkan banyak klien untuk memanggil metode di server alih-alih membuat setiap koneksi secara individual.

Ruben Bhattacharya
sumber
Protokol mana yang "RPC", khususnya? Sepengetahuan saya, ada dua lusin protokol untuk RPC, dan setengahnya tersedia untuk Java.
foo
@foo Tidak diragukan lagi dia merujuk ke Sun-RPC, tetapi semua RPC berarti Panggilan Prosedur Jarak Jauh, tidak ada objek atau metode, jadi itu tidak benar-benar relevan.
Marquis of Lorne