Sự khác biệt cơ bản giữa RPC và RMI là RPC là một cơ chế cho phép gọi thủ tục trên máy tính từ xa trong khi RMI là triển khai RPC trong java. RPC là ngôn ngữ trung lập nhưng chỉ hỗ trợ các kiểu dữ liệu nguyên thủy được thông qua. Mặt khác, RMI bị giới hạn ở Java nhưng cho phép truyền các đối tượng. RPC tuân theo các cấu trúc ngôn ngữ thủ tục truyền thống trong khi RMI hỗ trợ thiết kế hướng đối tượng.
RPC, viết tắt của Cuộc gọi thủ tục từ xa, là một loại giao tiếp giữa các quá trình. Điều này cho phép gọi một chức năng trong một quy trình khác đang chạy trên máy tính cục bộ hoặc máy tính từ xa. Khái niệm này đã xuất hiện từ lâu vào năm 1980, nhưng triển khai nổi tiếng đầu tiên đã được nhìn thấy trong Unix.
RPC bao gồm một số bước. Máy khách thực hiện một cuộc gọi thủ tục trên máy tính cục bộ như bình thường. Mô-đun có tên client stub thu thập các đối số và tạo một thông báo và chuyển đến hệ điều hành, Hệ điều hành thực hiện một cuộc gọi hệ thống và gửi tin nhắn này đến máy tính từ xa. Hệ điều hành trong máy chủ thu thập thông báo và chuyển đến mô-đun trên máy chủ có tên là máy chủ. Sau đó, stub máy chủ gọi thủ tục trên máy chủ. Cuối cùng, kết quả được gửi lại cho khách hàng.
Ưu điểm của việc sử dụng RPC là nó độc lập với các chi tiết mạng. Lập trình viên chỉ cần xác định một cách trừu tượng trong khi hệ điều hành sẽ chăm sóc các chi tiết mạng bên trong. Vì vậy, điều này làm cho việc lập trình dễ dàng hơn và cho phép RPC hoạt động trên mọi mạng bất chấp sự khác biệt về vật lý và giao thức. Việc triển khai RPC có mặt trong tất cả các hệ điều hành chính như Unix, Linux, Windows và OS X. RPC nói chung là ngôn ngữ trung lập do đó nó giới hạn các loại dữ liệu đối với các loại nguyên thủy nhất vì chúng phải phổ biến cho tất cả các ngôn ngữ. Cách tiếp cận trong RPC không hướng đối tượng, nhưng nó là một cơ chế thủ tục truyền thống như trong C.
RMI, viết tắt của Remote Method Invocation, là một API (Giao diện lập trình ứng dụng) thực hiện RPC trong java để hỗ trợ bản chất hướng đối tượng. Điều này cho phép gọi các phương thức Java trên một máy ảo Java khác nằm trên cùng một máy tính hoặc từ xa. Hạn chế của RMI là chỉ các phương thức Java có thể được gọi, nhưng điều này đi kèm với lợi thế là các đối tượng có thể được truyền dưới dạng đối số và trả về giá trị. Khi hiệu suất được coi là RMI chậm hơn RPC do sự tham gia của mã byte trên máy ảo Java, nhưng RMI rất thân thiện với lập trình viên và nó rất dễ sử dụng.
RMI sử dụng các cơ chế bảo mật sẵn có trong Java và cũng cung cấp cho một nhà máy ổ cắm cho phép sử dụng các giao thức lớp vận chuyển tùy chỉnh không TCP. Hơn nữa, RMI cung cấp các phương thức để vượt qua tường lửa. Các bước xảy ra trong RMI tương tự như RPC. Việc triển khai RMI sẽ chăm sóc các chi tiết mạng bên trong mà lập trình viên không phải lo lắng về chúng.
• RPC là ngôn ngữ trung lập trong khi RMI bị giới hạn ở Java.
• RPC là thủ tục như trong C, nhưng RMI là hướng đối tượng.
• RPC chỉ hỗ trợ các kiểu dữ liệu nguyên thủy trong khi RMI cho phép các đối tượng được truyền dưới dạng đối số và trả về giá trị. Khi sử dụng RPC, lập trình viên phải phân chia bất kỳ đối tượng ghép nào thành các kiểu dữ liệu nguyên thủy.
• RMI dễ dàng lập trình RPC đó.
• RMI chậm hơn RPC do RMI liên quan đến việc thực thi mã byte java.
• RMI cho phép sử dụng các mẫu thiết kế do tính chất hướng đối tượng trong khi RPC không có khả năng này.
Tóm lược:
RPC là một cơ chế trung lập ngôn ngữ cho phép gọi thủ tục trên máy tính từ xa. Tuy nhiên, tính năng trung lập ngôn ngữ giới hạn các loại dữ liệu được truyền dưới dạng đối số và trả về giá trị cho các kiểu nguyên thủy. RMI là việc triển khai RPC trong Java và nó cũng hỗ trợ truyền đối tượng, làm cho cuộc sống của lập trình viên dễ dàng hơn. Ưu điểm của RMI là hỗ trợ thiết kế hướng đối tượng, nhưng hạn chế đối với Java là một bất lợi.
Hình ảnh lịch sự: