Java RMI - บทนำ

RMI ย่อมาจาก Remote Method Invocation. เป็นกลไกที่อนุญาตให้อ็อบเจ็กต์ที่อยู่ในระบบหนึ่ง (JVM) เข้าถึง / เรียกใช้อ็อบเจ็กต์ที่รันบน JVM อื่น

RMI ใช้เพื่อสร้างแอปพลิเคชันแบบกระจาย ให้การสื่อสารระยะไกลระหว่างโปรแกรม Java มีให้ในแพ็คเกจjava.rmi.

สถาปัตยกรรมของแอปพลิเคชัน RMI

ในแอปพลิเคชัน RMI เราเขียนโปรแกรมสองโปรแกรม a server program (อยู่บนเซิร์ฟเวอร์) และ a client program (อยู่บนไคลเอนต์)

  • ภายในโปรแกรมเซิร์ฟเวอร์จะมีการสร้างวัตถุระยะไกลและการอ้างอิงของวัตถุนั้นพร้อมใช้งานสำหรับไคลเอนต์ (โดยใช้รีจิสทรี)

  • โปรแกรมไคลเอ็นต์ร้องขอวัตถุระยะไกลบนเซิร์ฟเวอร์และพยายามเรียกใช้เมธอด

แผนภาพต่อไปนี้แสดงสถาปัตยกรรมของแอปพลิเคชัน RMI

ตอนนี้ให้เราพูดถึงส่วนประกอบของสถาปัตยกรรมนี้

  • Transport Layer- เลเยอร์นี้เชื่อมต่อไคลเอนต์และเซิร์ฟเวอร์ จะจัดการการเชื่อมต่อที่มีอยู่และตั้งค่าการเชื่อมต่อใหม่

  • Stub- ต้นขั้วเป็นตัวแทน (พร็อกซี) ของวัตถุระยะไกลที่ไคลเอนต์ มันอยู่ในระบบไคลเอนต์ ทำหน้าที่เป็นเกตเวย์สำหรับโปรแกรมไคลเอนต์

  • Skeleton - นี่คือวัตถุที่อยู่ทางฝั่งเซิร์ฟเวอร์ stub สื่อสารกับโครงกระดูกนี้เพื่อส่งคำขอไปยังวัตถุระยะไกล

  • RRL(Remote Reference Layer) - เป็นชั้นที่จัดการการอ้างอิงที่ลูกค้าทำไปยังวัตถุระยะไกล

การทำงานของแอปพลิเคชัน RMI

ประเด็นต่อไปนี้สรุปวิธีการทำงานของแอปพลิเคชัน RMI -

  • เมื่อไคลเอ็นต์ทำการโทรไปยังอ็อบเจ็กต์ระยะไกลไคลเอ็นต์จะได้รับโดยต้นขั้วซึ่งส่งคำขอนี้ไปยัง RRL ในที่สุด

  • เมื่อ RRL ฝั่งไคลเอ็นต์ได้รับคำขอจะเรียกใช้เมธอดที่เรียกว่า invoke() ของวัตถุ remoteRef. ส่งคำขอไปยัง RRL ทางฝั่งเซิร์ฟเวอร์

  • RRL บนฝั่งเซิร์ฟเวอร์ส่งคำขอไปยัง Skeleton (พร็อกซีบนเซิร์ฟเวอร์) ซึ่งสุดท้ายจะเรียกใช้วัตถุที่ต้องการบนเซิร์ฟเวอร์

  • ผลลัพธ์จะถูกส่งกลับไปยังไคลเอนต์

Marshalling และ Unmarshalling

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

ที่ฝั่งเซิร์ฟเวอร์พารามิเตอร์ที่บรรจุจะถูกยกเลิกการรวมกลุ่มจากนั้นจึงเรียกวิธีการที่ต้องการ กระบวนการนี้เรียกว่าunmarshalling.

RMI Registry

RMI Registry เป็นเนมสเปซที่วางอ็อบเจ็กต์เซิร์ฟเวอร์ทั้งหมด ทุกครั้งที่เซิร์ฟเวอร์สร้างอ็อบเจ็กต์เซิร์ฟเวอร์จะลงทะเบียนอ็อบเจ็กต์นี้ด้วย RMIregistry (โดยใช้bind() หรือ reBind()วิธีการ) สิ่งเหล่านี้ได้รับการจดทะเบียนโดยใช้ชื่อเฉพาะที่เรียกว่าbind name.

ในการเรียกใช้วัตถุระยะไกลไคลเอนต์ต้องการการอ้างอิงของวัตถุนั้น ในเวลานั้นไคลเอนต์ดึงวัตถุจากรีจิสทรีโดยใช้ชื่อผูก (โดยใช้lookup() วิธี).

ภาพประกอบต่อไปนี้อธิบายกระบวนการทั้งหมด -

เป้าหมายของ RMI

ต่อไปนี้เป็นเป้าหมายของ RMI -

  • เพื่อลดความซับซ้อนของแอปพลิเคชัน
  • เพื่อรักษาความปลอดภัยประเภท
  • เก็บขยะแบบกระจาย.
  • ลดความแตกต่างระหว่างการทำงานกับวัตถุภายในและระยะไกล