Java RMI และ RPC แตกต่างกันอย่างไร


163

Java RMI และ RPC แตกต่างกันอย่างไร

ฉันได้อ่านในบางสถานที่ที่ RMI ใช้วัตถุหรือไม่


ฉันคิดว่าRMIใน Java เป็นสิ่งที่เหมือนกันgRPCใน. Net ...
Yousha Aleayoub

คำตอบ:


137

RPC เป็นพื้นฐานของ C และด้วยเหตุนี้มันมีความหมายของการเขียนโปรแกรมที่มีโครงสร้างในอีกด้านหนึ่ง RMI เป็นเทคโนโลยีที่ใช้ Java และเป็นวัตถุเชิง

ด้วย RPC คุณสามารถเรียกใช้ฟังก์ชั่นระยะไกลที่ส่งออกไปยังเซิร์ฟเวอร์ใน RMI คุณสามารถมีการอ้างอิงไปยังวัตถุระยะไกลและเรียกใช้วิธีการของพวกเขาและยังผ่านและส่งกลับการอ้างอิงวัตถุระยะไกลเพิ่มเติมที่สามารถกระจายระหว่างอินสแตนซ์ JVM มากมาย .

RMI โดดเด่นเมื่อความต้องการในการพัฒนาบางสิ่งที่ซับซ้อนกว่าสถาปัตยกรรมไคลเอนต์ - เซิร์ฟเวอร์ที่แท้จริงเกิดขึ้น ง่ายมากที่จะกระจายออบเจ็กต์ผ่านเครือข่ายทำให้ลูกค้าทุกคนสามารถสื่อสารได้โดยไม่ต้องสร้างการเชื่อมต่อส่วนบุคคลอย่างชัดเจน


19
สิ่งนี้ไม่ถูกต้อง RPC เป็นพื้นฐานของ Java เช่นกัน JAX-RPC 1.1 ถูกแทนที่ด้วย 2.0 ซึ่งเปลี่ยนชื่อเป็น JAX-WS ใน Java เมื่อคุณพูดถึง RPC คุณกำลังพูดถึง SOAP และ Web Services นี่คือบทความ IBM เกี่ยวกับ JAX-RPC 1.1 ที่เปลี่ยนเป็น JAX-WS ibm.com/developerworks/library/ws-tip-jaxwsrpc
MattC

1
@ MattC ฉันคิดว่าบทความที่คุณเชื่อมโยงชี้ว่าเหตุผลในการเปลี่ยนชื่อจาก "JAX-RPC" เป็น "JAX-WS" นั้นตรงกับชื่อเดิมที่ไม่ถูกต้องเนื่องจากข้อกำหนดนี้เกี่ยวข้องมากกว่า "RPC" ในความหมายดั้งเดิม ดังนั้นคำตอบนี้ซึ่งพูดถึงความหมายดั้งเดิมของ RPC ยังคงถูกต้อง
xji

2
ใช่สิ่งที่ฉันหมายถึงคือ RPC มีต้นกำเนิดในโลก C / Unix (อย่างน้อยที่สุดก็คือการติดตั้ง RPC ที่ใช้กันทั่วไป, ONCRPC) และเป็นแบบจำลองหลังจากโมเดลการคำนวณนั้น แน่นอนไม่มีอะไรป้องกันไม่ให้นำไปใช้กับภาษาโปรแกรมอื่น ๆ
fortran

6
ความคิดเห็นที่แตกต่างกันเล็กน้อยเกี่ยวกับวิธีการใช้ความหมายไม่ทำให้คำตอบผิด (หรือทำให้เข้าใจผิด) ทุกคนที่อ่านสิ่งนี้สามารถเข้าใจได้ง่ายว่า "พื้นฐาน C" นั้นหมายถึง "กระบวนงานที่มุ่งเน้น" - ใครก็ตามที่เรียนรู้ Java รู้ถึงความแตกต่างของ POP และ OOP
Navin Israni

ลูกค้า nodejs (พูด) สามารถเรียกการเรียก RMI บนเซิร์ฟเวอร์ได้หรือไม่? มีวิธีดังกล่าวหรือไม่
Hitesh Bajaj

45

ความแตกต่างที่สำคัญระหว่าง RPC และ RMI คือว่าRMI เกี่ยวข้องกับวัตถุ แทนการเรียกขั้นตอนระยะไกลโดยใช้พร็อกซี่ฟังก์ชั่นที่เราใช้แทนพร็อกซี่วัตถุ

มีความโปร่งใสมากขึ้นกับ RMI คือเนื่องจากการเอารัดเอาเปรียบของวัตถุการอ้างอิงการสืบทอดความหลากหลายและข้อยกเว้นเนื่องจากเทคโนโลยีถูกรวมเข้ากับภาษา

RMI นั้นล้ำหน้ากว่า RPC ซึ่งอนุญาตให้มีการเรียกใช้แบบไดนามิกที่อินเตอร์เฟสสามารถเปลี่ยนแปลงได้ในขณะทำงานและการปรับตัวของวัตถุซึ่งให้เลเยอร์เพิ่มเติมของสิ่งที่เป็นนามธรรม


18

1. วิธีการ:

RMI ใช้กระบวนทัศน์เชิงวัตถุที่ผู้ใช้จำเป็นต้องรู้วัตถุและวิธีการของวัตถุที่เขาต้องการเรียกใช้

RPC ไม่จัดการกับวัตถุ แต่จะเรียกรูทีนย่อยเฉพาะที่สร้างไว้แล้ว

2. การทำงาน:

ด้วย RPC คุณจะได้รับการเรียกขั้นตอนที่มีลักษณะเหมือนการโทรภายใน RPC จัดการความซับซ้อนที่เกี่ยวข้องกับการส่งการโทรจากภายในเครื่องไปยังคอมพิวเตอร์ระยะไกล

RMI ทำสิ่งเดียวกัน แต่ RMI ส่งการอ้างอิงไปยังวัตถุและวิธีการที่ถูกเรียก

RMI = RPC + การวางแนววัตถุ

3. Better one:

RMI เป็นวิธีการที่ดีกว่าเมื่อเทียบกับ RPC โดยเฉพาะอย่างยิ่งกับโปรแกรมที่มีขนาดใหญ่กว่าเนื่องจากให้รหัสที่สะอาดกว่าและง่ายต่อการระบุว่ามีบางอย่างผิดปกติ

4. ตัวอย่างระบบ:

ระบบ RPC: SUN RPC, DCE RPC

ระบบ RMI: Java RMI, CORBA, Microsoft DCOM / COM +, SOAP (Simple Object Access Protocol)


ในแอปพลิเคชันของฉันฉันใช้ JAX-WS เพื่อแสดง / ใช้บริการสบู่ ฉันสามารถเรียกมันว่ากลไกการพิมพ์ RPC ได้หรือไม่? ตามความเข้าใจของฉันใน JAX-WS เราเรียกใช้วิธีการทางไกลโดยใช้ Java reflection API ดังนั้นการจับคู่กับคำจำกัดความของ RPC กรุณายืนยัน !
Gunjan Shah

11

Remote Procedure Call (RPC)เป็นการสื่อสารระหว่างกระบวนการที่อนุญาตให้เรียกใช้ฟังก์ชันในกระบวนการอื่นที่อยู่ในเครื่องท้องถิ่นหรือระยะไกล

รีโมตเมธอดการเรียกใช้ (RMI)เป็น API ซึ่งใช้ RPC ใน java พร้อมด้วยการสนับสนุนกระบวนทัศน์เชิงวัตถุ

  1. คุณสามารถนึกถึงการเรียกใช้ RPC เหมือนกับการเรียกขั้นตอน C RPC รองรับชนิดข้อมูลดั้งเดิมที่เป็น RMI สนับสนุนพารามิเตอร์วิธี / ประเภทกลับเป็นวัตถุจาวา

  2. RMI นั้นง่ายต่อการตั้งโปรแกรมไม่เหมือน RPC คุณสามารถคิดว่าตรรกะทางธุรกิจของคุณในแง่ของวัตถุแทนลำดับของชนิดข้อมูลดั้งเดิม

  3. RPC เป็นภาษาที่เป็นกลางไม่เหมือน RMI ซึ่ง จำกัด อยู่ที่จาวา

  4. RMI นั้นช้ากว่า RPC เล็กน้อย

ดูที่บทความนี้สำหรับการนำ RPC ไปใช้ใน C


6

RMI หรือระยะไกลวิธี Invokation จะคล้ายกับ RPC หรือโทรระยะไกลกระบวนงานในการที่ลูกค้าทั้งวัตถุส่งพร็อกซี่ (หรือไม่สมบูรณ์) ไปยังเซิร์ฟเวอร์ แต่แตกต่างที่ลึกซึ้งคือฝั่งไคลเอ็นต์ RPC จะเรียกฟังก์ชั่นผ่านฟังก์ชั่นพร็อกซี่และ RMI เรียกวิธี ผ่าน ฟังก์ชั่นพร็อกซี่ RMI นั้นถือว่าเหนือกว่าเล็กน้อยเนื่องจากเป็นเวอร์ชันเชิงวัตถุของ RPC

จากที่นี่

สำหรับข้อมูลเพิ่มเติมและตัวอย่างมีรูปลักษณ์ที่นี่


5
method คือฟังก์ชั่นที่เรียกว่าในจาวาฟังก์ชั่นคือสิ่งที่เรียกว่าวิธีการใน c / c ++ ยังคงแตกต่างกันอย่างไร
starcorn

1
ความแตกต่างคือ (ในกรณีของวิธีการตัวอย่าง) มีวัตถุที่กล่าวอ้าง ออบเจ็กต์ที่เรียกใช้อาจต้องส่ง (พร้อมรหัส) หรือต้องการใช้งานบนเซิร์ฟเวอร์เอาออก แต่มีวิธีที่จะอ้างอิงบนเซิร์ฟเวอร์ภายใน
Ellen Spertus

ไม่สนใจว่าภาษาการเขียนโปรแกรมเฉพาะจัดการกับวิธีการและฟังก์ชั่นอย่างไรความหมายของวรรณกรรมคือฟังก์ชั่นคืนค่าในขณะที่วิธีการแก้ไขสถานะ
ด่าน

RPC เรียกใช้ฟังก์ชัน FUNCTIONS ผ่านฟังก์ชันพร็อกซีและ RMI เรียกใช้วิธีการใช้พร็อกซี OBJECT ขวา?
Noor Nawaz

ลูกค้ามักจะไม่ 'ส่งวัตถุพร็อกซี (หรือไม่สมบูรณ์) ไปยังเซิร์ฟเวอร์' การอ้างอิงคุณภาพต่ำ
มาร์ควิสแห่ง Lorne

6

ข้อแตกต่างที่แท้จริงเพียงอย่างเดียวระหว่าง RPC และ RMI คือมีวัตถุที่เกี่ยวข้องใน RMI: แทนที่จะเรียกฟังก์ชั่นผ่านฟังก์ชั่นพร็อกซี่เราเรียกใช้วิธีการผ่านพร็อกซี


6

ความแตกต่างระหว่าง RMI และ RPC คือ:

  • RMIเป็นชื่อบ่งชี้ว่า Remote Method Invoking: เป็นวิธีการที่เรียกใช้หรือวัตถุ และ
  • RPCเรียกใช้ฟังก์ชัน

2
อะไรคือความแตกต่างที่คุณให้ความสำคัญโดยนัย แต่ไม่ชัดเจนระหว่าง a methodและ a function? ใน Java มีฟังก์ชั่นไม่มี ... แต่ใน OOP เท่าที่ผมจำได้ว่าพวกเขามีความหมายเหมือนกันและเพื่อให้มีและinvocation call
นาที

RPC เรียกใช้ขั้นตอน / ฟังก์ชัน - แบนออก
foo

3

RPCเป็นโปรโตคอลเก่าที่อิงกับ C.It สามารถเรียกใช้โพรซีเดอร์แบบรีโมตและทำให้ดูเหมือนกับการเรียกโลคอล RPC จะจัดการกับความซับซ้อนของการส่งผ่านรีโมตนั้นไปยังเซิร์ฟเวอร์และรับผลลัพธ์ไปยังไคลเอนต์

Java RMIยังประสบความสำเร็จในสิ่งเดียวกัน แต่แตกต่างกันเล็กน้อยมันใช้การอ้างอิงไปยังวัตถุระยะไกลดังนั้นสิ่งที่มันทำคือมันส่งการอ้างอิงไปยังวัตถุระยะไกลพร้อมกับชื่อของวิธีการที่จะเรียกมันจะดีกว่าเพราะมันส่งผลในการทำความสะอาด รหัสในกรณีของโปรแกรมขนาดใหญ่และการกระจายออบเจกต์บนเครือข่ายทำให้ลูกค้าหลายรายสามารถเรียกใช้เมธอดในเซิร์ฟเวอร์แทนการสร้างการเชื่อมต่อแต่ละรายการแยกกัน


โพรโทคอลใดคือ "RPC" โดยเฉพาะ สำหรับความรู้ของฉันมีสองโปรโตคอลสำหรับ RPC และอีกครึ่งของโปรโตคอลที่มีสำหรับ Java
foo

@foo ไม่ต้องสงสัยเลยว่าเขาอ้างถึง Sun-RPC แต่ RPC ทั้งหมดหมายถึงการเรียกขั้นตอนระยะไกลวัตถุหรือวิธีการ nO ดังนั้นจึงไม่เกี่ยวข้องกันจริงๆ
มาร์ควิสแห่ง Lorne
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.