24 ม.ค. 2021 เวลา 13:04 • วิทยาศาสตร์ & เทคโนโลยี
Java RMI ตอนที่ 3: การเขียนโปรแกรมฝั่งไคลเอนต์และการรันโปรแกรม
หมายเหตุ: โหลดโค้ดโปรแกรมได้ที่ https://github.com/ajsarun/basicJavaRMI ถ้าใครโหลดแล้วจากตอนที่แล้ว ไม่ต้องโหลดแล้วนะครับ
มาถึงตอนสุดท้ายแล้วครับ ส่วนใครที่ยังไม่ได้อ่านตอน 1 และตอน 2 ไปอ่านกันก่อนก็ดีนะครับ ในตอนนี้เราจะมาเขียนโปรแกรมฝั่งไคลเอนต์และลองรันโปรแกรมกันครับ มาดูโปรแกรมฝั่งไคลเอนต์กันก่อนครับ
1: import java.rmi.*;
2: import java.net.*;
3: import java.rmi.registry.LocateRegistry;
4: import java.rmi.registry.Registry;
5:
6: public class MyMathClient
7: {
8: public static void main(String[] args)
9: {
10: if (args.length == 0)
11: {
12: System.err.println("Usage java MyMathClient ");
13: }
14: try
15: {
16: Registry registry = LocateRegistry.getRegistry(args[0]);
17: MyMath stub = (MyMath) registry.lookup("MyMathServer");
18: System.out.println(stub.add(3,2));
19:
20: }
21: catch (Exception e)
22: {
23: System.err.println("System Exception" + e);
24: }
25: }
26: }
จากโปรแกรมในบรรทัดที่ 16 เป็นการค้นหาอาร์เอ็มไอรีจิสตรี (RMI registry) ในเครื่องที่อ็อบเจกต์เซิร์ฟเวอร์รันอยู่ เราจะรันโปรแกรมนี้โดยระบุชื่อเครื่องเซิร์ฟเวอร์มาเป็นพารามิเตอร์บรรทัดคำสั่ง (command line parameter) และส่งชื่อเครื่องเซิร์ฟเวอร์นี้ให้กับเมท็อด getRegistry()
บรรทัดที่ 17 ค้นหาอ็อบเจกต์โดยระบุชื่ออ็อบเจกต์เป็นชื่อเดียวกันกับที่ฝั่งเซิร์ฟเวอร์ลงทะเบียนไว้ ในที่นี้คือ MyMathServer สิ่งที่เราจะได้กลับมาจากการเรียกเมท็อด lookup() ในบรรทัดนี้ก็คืออ็อบเจ็กต์เรฟเฟอร์เรนซ์ (object reference) ไปยังอ็อบเจกต์บนฝั่งเซิร์ฟเวอร์
ให้สังเกตว่าเราใช้ชื่อของอินเทอร์เฟซ (interface) คือ MyMath ไม่ใช่ชื่อของคลาสผู้รับใช้ (servant class) MyMathImpl นะครับ เพราะโปรแกมฝั่งไคลเอนต์จะรู้รายลัเอียดของฟังก์ชันผ่านทางอินเทอร์เฟซเท่านั้น
หลังจากนี้เราก็สามารถเรียกใช้เมท็อดของอ็อบเจกต์บนฝั่งเซิร์ฟเวอร์ได้ราวกับอ็อบเจกต์นั้นอยู่บนเครื่องเดียวกับไคลเอนต์ ดังแสดงในบรรทัดที่ 18 ซึ่งเป็นการเรียกใช้เมท็อด add() ให้หาผลลัพธ์ของ 3+2
เอาละครับ มาลองรันโปรแกรมกันดู เริ่มต้นจาก rmiregistry
รัน rmiregistry
เราใช้คำสั่ง start เพื่อให้ rmiregistry รันอยู่ในอีกหน้าต่างหนึ่ง เพื่อที่เราจะได้ใช้หน้าต่างนี้ในการรันเซิฟร์เวอร์และไคลเอนต์ต่อไป โดยปริยายแล้วถ้าเราไม่ระบุหมายเลขพอร์ต rmiregistry จะใช้หมายเลขพอร์ตคือ 1099
จากนั้นรันโปรแกรมเซิร์ฟเวอร์ ด้วยคำสั่ง start java MyMathServer
การรัน MyMathServer
จะเห็นว่า MyMathServer รันอยู่ในอีกหน้าต่างหนึ่ง โดยพิมพ์คำว่า MyMath Server ready
จากนั้นก็รันโปรแกรมไคลเอนต์โดยใช้คำสั่ง java MyMathClient localhost
การรัน MyMathClient
เราระบุ localhhost เพราะในตัวอย่างนี้ rmiregistry รันอยู่บนเครื่องเดียวกับไคลเอนต์ ซึ่งผลลัพธ์ที่ได้รับกลับมาคือ 5 เพราะในโปรแกรมเรียกใช้เมท็อด add(3.2) ตามโปรแกรมในบรรทัดที่ 18
ถึงตอนนี้ก็คงพอเห็นภาพการเขียนโปรแกรม Java RMI อย่างคร่าว ๆ กันแล้วนะครับ ถึงแม้เราอาจจะไม่ได้เขียนโปรแกรมด้วย RMI กันมากนักในปัจจุบัน แต่ก็คิดว่าพอจะทำให้เห็นภาพการพัฒนาของเทคโนโลยี และได้รู้จักเครื่องมือที่ติดตั้งมากับตัว JDK ของภาษา Java ที่ทำให้เราสามารถเขียนโปรแกรมเครือข่ายง่าย ๆ ได้ โดยไม่ต้องศึกษาเครื่องมือที่ซับซ้อน และไม่ต้องใช้ทรัพยากรมากอีกด้วย

ดูเพิ่มเติมในซีรีส์

โฆษณา