Sự khác biệt giữa Java RMI và RPC là gì?


163

Sự khác biệt thực tế giữa Java RMI và RPC là gì?

Tôi đã đọc ở một số nơi RMI sử dụng Đối tượng?


Tôi nghĩ rằng RMItrong Java là một cái gì đó giống như gRPCtrong .Net ...
Yousha Aleayoub

Câu trả lời:


137

RPC dựa trên C và do đó, nó có cấu trúc ngữ nghĩa lập trình, mặt khác, RMI là một công nghệ dựa trên Java và nó hướng đối tượng.

Với RPC, bạn chỉ có thể gọi các hàm từ xa được xuất vào máy chủ, trong RMI bạn có thể có các tham chiếu đến các đối tượng từ xa và gọi các phương thức của chúng, đồng thời chuyển và trả lại các tham chiếu đối tượng từ xa có thể được phân phối giữa nhiều phiên bản JVM, vì vậy nó mạnh hơn nhiều .

RMI nổi bật khi có nhu cầu phát triển thứ gì đó phức tạp hơn kiến ​​trúc máy khách-máy chủ thuần túy phát sinh. Rất dễ dàng để phân tán các đối tượng qua mạng cho phép tất cả các máy khách liên lạc mà không cần phải thiết lập các kết nối riêng lẻ một cách rõ ràng.


19
Điều này là không đúng. RPC cũng dựa trên Java. JAX-RPC 1.1 đã được thay thế bằng 2.0, sau đó được đổi tên thành JAX-WS. Trong Java, khi bạn nói về RPC, bạn đang nói về SOAP và Dịch vụ web. Đây là một bài viết của IBM về JAX-RPC 1.1 thay đổi thành JAX-WS. ibm.com/developerworks/l
Library / ws

1
@MattC Tôi nghĩ rằng bài viết mà bạn liên kết đã chỉ ra rằng lý do cho tên này thay đổi từ "JAX-RPC" thành "JAX-WS" chính xác là tên ban đầu không chính xác, vì thông số kỹ thuật này không chỉ liên quan đến "RPC" theo nghĩa truyền thống. Vì vậy, câu trả lời này, nói về ý nghĩa truyền thống của RPC, vẫn đúng.
xji

2
vâng, điều tôi muốn nói là RPC có nguồn gốc từ thế giới C / Unix (ít nhất là triển khai RPC phổ biến nhất, ONCRPC) và như vậy nó được mô phỏng theo mô hình tính toán đó; tất nhiên không có gì ngăn cản việc triển khai nó trên bất kỳ ngôn ngữ lập trình nào khác
fortran

6
Một chút khác biệt về quan điểm về cách sử dụng ngữ nghĩa không làm cho câu trả lời sai (hoặc sai lệch). Bất cứ ai đọc điều này đều có thể dễ dàng hiểu rằng "C dựa trên" về cơ bản có nghĩa là "định hướng thủ tục" - Bất kỳ ai đã học Java đều biết sự khác biệt giữa POP và OOP.
Navin Israni

một máy khách nodejs (nói) có thể gọi các cuộc gọi RMI trên máy chủ không? Có cách nào như vậy không?
Hitesh Bajaj

45

Sự khác biệt chính giữa RPC và RMI là RMI liên quan đến các đối tượng . Thay vì gọi các thủ tục từ xa bằng cách sử dụng chức năng proxy , thay vào đó chúng tôi sử dụng một đối tượng proxy .

RMI có tính minh bạch cao hơn, cụ thể là do khai thác các đối tượng, tài liệu tham khảo, kế thừa, đa hình và ngoại lệ khi công nghệ được tích hợp vào ngôn ngữ.

RMI cũng tiên tiến hơn RPC, cho phép gọi động , trong đó các giao diện có thể thay đổi khi chạy và điều chỉnh đối tượng , cung cấp thêm một lớp trừu tượng.


18

1. Cách tiếp cận:

RMI sử dụng mô hình hướng đối tượng trong đó người dùng cần biết đối tượng và phương thức của đối tượng mà anh ta cần gọi.

RPC không đối phó với các đối tượng. Thay vào đó, nó gọi các chương trình con cụ thể đã được thiết lập.

2. Làm việc:

Với RPC, bạn nhận được một cuộc gọi thủ tục trông khá giống cuộc gọi địa phương. RPC xử lý các phức tạp liên quan đến việc chuyển cuộc gọi từ cục bộ đến máy tính từ xa.

RMI thực hiện điều tương tự, nhưng RMI chuyển tham chiếu đến đối tượng và phương thức đang được gọi.

RMI = RPC + Hướng đối tượng

3. Tốt hơn một:

RMI là một cách tiếp cận tốt hơn so với RPC, đặc biệt là với các chương trình lớn hơn vì nó cung cấp một mã sạch hơn, dễ xác định hơn nếu có sự cố.

4. Ví dụ hệ thống:

Hệ thống RPC: SUN RPC, DCE RPC

Hệ thống RMI: Java RMI, CORBA, Microsoft DCOM / COM +, SOAP (Giao thức truy cập đối tượng đơn giản)


Trong ứng dụng của mình, tôi đang sử dụng JAX-WS để phơi bày / tiêu thụ các dịch vụ xà phòng. Tôi có thể gọi nó là cơ chế loại RPC không? Theo hiểu biết của tôi, trong JAX-WS, chúng tôi đang gọi phương thức từ xa bằng cách sử dụng API phản chiếu java. Vì vậy, nó phù hợp với định nghĩa của RPC. Vui lòng xác nhận !
Gunjan Shah

11

Cuộc gọi thủ tục từ xa (RPC) là một giao tiếp giữa các quá trình cho phép gọi một chức năng trong một quy trình khác nằm trong máy cục bộ hoặc máy từ xa.

Gọi phương thức từ xa (RMI) là một API, thực hiện RPC trong java với sự hỗ trợ của các mô hình hướng đối tượng.

  1. Bạn có thể nghĩ đến việc gọi RPC giống như gọi thủ tục C. RPC hỗ trợ các kiểu dữ liệu nguyên thủy trong đó RMI hỗ trợ các tham số / kiểu trả về như các đối tượng java.

  2. RMI dễ lập trình không giống như RPC. Bạn có thể nghĩ logic kinh doanh của mình theo các đối tượng thay vì một chuỗi các kiểu dữ liệu nguyên thủy.

  3. RPC là ngôn ngữ trung lập không giống như RMI, được giới hạn trong java

  4. RMI chậm hơn một chút so với RPC

Hãy xem bài viết này để thực hiện RPC trong C


6

RMI hoặc Gọi phương thức từ xa rất giống với RPC hoặc cuộc gọi Thủ tục từ xa ở chỗ máy khách vừa gửi các đối tượng proxy (hoặc sơ khai) đến máy chủ, tuy nhiên điểm khác biệt tinh tế là RPC phía máy khách gọi FUNCTION thông qua chức năng proxy và RMI gọi METHODS thông qua chức năng ủy quyền. RMI được coi là hơi vượt trội vì đây là phiên bản hướng đối tượng của RPC.

Từ đây .

Để biết thêm thông tin và ví dụ, hãy xem ở đây .


5
Phương thức là những hàm được gọi trong java, hàm là phương thức nào được gọi trong c / c ++. Vì vậy, sự khác biệt là gì?
starcorn

1
Một sự khác biệt là (trong trường hợp phương thức cá thể), có một đối tượng gọi. Đối tượng gọi hoặc cần phải được gửi (cùng với mã của nó) hoặc cần phải sống trên máy chủ loại bỏ nhưng có một cách để được tham chiếu trên máy chủ cục bộ.
Ellen Spertus

Bỏ qua cách các ngôn ngữ lập trình cụ thể xử lý các phương thức so với các hàm, ý nghĩa văn học là các hàm trả về một giá trị trong khi các phương thức sửa đổi trạng thái.
Dan

RPC gọi CHỨC NĂNG thông qua chức năng proxy và RMI gọi các PHƯƠNG PHÁP bằng cách sử dụng ĐỐI TƯỢNG proxy. Đúng?
Noor Nawaz

Máy khách thường không 'gửi các đối tượng proxy (hoặc sơ khai) đến máy chủ'. Trích dẫn kém chất lượng.
Hầu tước Lorne

6

Sự khác biệt thực sự duy nhất giữa RPC và RMI là có các đối tượng liên quan đến RMI: thay vì gọi các hàm thông qua chức năng proxy, chúng tôi gọi các phương thức thông qua proxy.


6

Sự khác biệt giữa RMI và RPC là:

  • RMI như tên cho biết Gọi phương thức từ xa: nó gọi một phương thức hoặc một đối tượng. Và
  • RPC nó gọi một hàm.

2
Những điểm khác biệt bạn ngầm nhấn mạnh, nhưng không làm rõ, giữa a methodvà a là functiongì? Trong Java không có chức năng ... nhưng trong OOP như xa như tôi có thể nhớ, họ là từ đồng nghĩa, và như vậy là invocationcall.
phút

RPC gọi một thủ tục / chức năng - căn hộ.
foo

3

RPC là một giao thức cũ dựa trên C. Nó có thể gọi một thủ tục từ xa và làm cho nó trông giống như một cuộc gọi cục bộ.RPC xử lý sự phức tạp của việc chuyển lời gọi từ xa đó đến máy chủ và nhận kết quả cho máy khách.

Java RMI cũng đạt được điều tương tự nhưng hơi khác một chút. Nó sử dụng các tham chiếu đến các đối tượng từ xa . Vì vậy, điều nó làm là nó gửi một tham chiếu đến đối tượng từ xa cùng với tên của phương thức để gọi. Nó tốt hơn vì nó cho kết quả sạch hơn mã trong trường hợp các chương trình lớn và phân phối các đối tượng qua mạng cho phép nhiều máy khách gọi các phương thức trong máy chủ thay vì thiết lập từng kết nối riêng lẻ.


Giao thức nào là "RPC", cụ thể? Theo hiểu biết của tôi, có hai tá giao thức cho RPC và một nửa trong số các giao thức có sẵn cho Java.
foo

@foo Không còn nghi ngờ gì nữa, anh ta đang đề cập đến Sun-RPC, nhưng tất cả các RPC đều có nghĩa là Cuộc gọi thủ tục từ xa, các đối tượng hoặc phương thức, vì vậy nó không thực sự phù hợp.
Hầu tước Lorne
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.