1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Bài giảng lập trình ứng dụng mạng bài 3 GV võ tấn dũng

44 319 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 44
Dung lượng 390,37 KB

Nội dung

TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM LẬP TRÌNH ỨNG DỤNG MẠNG BÀI RMI (Remote Method Invoke) GIẢNG VIÊN: VÕ TẤN DŨNG PHẦN GV: Võ Tấn Dũng GIỚI THIỆU TỔNG QUAN VỀ RMI TỔNG QUAN VỀ RMI • Thông thường chương trình viết dạng thủ tục hay hàm Mã lệnh hàm (hay thủ tục) nạp thẳng vào nhớ thực thi máy cục Vậy có cách nạp nội dung hàm hay đối tượng máy gọi chúng từ máy khác hay không? GV: Võ Tấn Dũng • RMI (Remote Method Invoke – có nghĩa gọi phương thức từ xa) cách thức giao tiếp đối tượng Java có mã lệnh cài đặt nằm máy khác gọi lẫn Local Machine (Client) Remote Machine (Server) SampleServer remoteObject; int s; … s=remoteObject.sum(1,2); 1,2 public int sum(int a,int b) { return a + b; } GV: Võ Tấn Dũng System.out.println(s); STUB SKELETON GV: Võ Tấn Dũng • Các tham số truyền cho phương thức đối tượng xa phải đóng gói chuyển qua mạng để đến với phương thức thực (việc truyền kết trở vậy) • Để giải vấn đề trên, đối tượng Java hai máy khác không gọi trực tiếp mà thông qua lớp trung gian nằm máy khách máy chủ • Phía máy khách, lớp trung gian gọi Stub Phía máy chủ, lớp trung gian gọi Skeleton Computer A A1 A2 C1_skel C1_stub Computer C C1 B1_stub B1_skel Computer B GV: Võ Tấn Dũng B1 CƠ CHẾ HOẠT ĐỘNG CỦA RMI Remote Machine • Đầu tiên RMI-server đăng ký tên với Registry bind RMI Server Registry skeleton • RMI-client tìm tên RMI-server Registry để thiết lập truy cập từ xa với RMI-server return call lookup stub RMI Client Local Machine GV: Võ Tấn Dũng • Stub đóng gói tham số gửi đến Skeleton Skeleton gọi phương thức từ xa đóng gói kết gửi Stub GIAO TIẾP STUB-SKELETON return RMI Server • Client gọi phương thức từ xa, lời gọi chuyển tiếp đến Stub • Stub có nhiệm vụ gửi tiếp lời yêu cầu đến Skeleton phía server cách Stub mở socket đến server, đóng gói tham số truyền luồng liệu đến Skeleton • Skeleton chứa đựng phương thức nhận lời yêu cầu từ xa, mở gói tham số, gọi hàm thực server để tính toán trả kết Stub phía client GV: Võ Tấn Dũng Stub RMI Client skeleton call PHẦN GV: Võ Tấn Dũng THIẾT KẾ ỨNG DỤNG PHÂN TÁN RMI CÁC BƯỚC XÂY DỰNG MỘT RMI 10 GV: Võ Tấn Dũng Định nghĩa giao tiếp từ xa (remote interface) server Xây dựng đối tượng từ xa (remote object) cách thực giao tiếp từ xa (remote interface) Xây dựng chương trình phía client Biên dịch file Java nguồn (phía client server) Sinh Stub phía client Skeleton phía server Khởi động đăng ký RMI (RMI registry) Khởi động đối tượng từ xa phía server Chạy chương trình phía client VÍ DỤ CHUYỂN ĐỐI TƯỢNG THEO THAM TRỊ • Bước 6: Biên dịch chương trình, ta lưu tất mã nguồn vào thư mục C:\RMI\ByValue chuyển vào thư mục thực lệnh biên dịch C:\RMI\ByValue>javac *.java • Tiếp đến tạo tập tin trung gian Stub Skeleton: C:\RMI\ByValue>rmic PingServerImpl • Kết ta thu tập tin sau: PingServer.class PingServerImpl.class PingServerImpl_Stub.class PingServerImpl_Skel.class Setup.class Client.class 30 GV: Võ Tấn Dũng (step 6) VÍ DỤ CHUYỂN ĐỐI TƯỢNG THEO THAM TRỊ (step 7) • Bước 7: Cài đặt đối tượng thực thi chương trình Bạn gõ từ cửa sổ DOS-promp lệnh sau: • Khởi động đăng ký rmiregistry C:\RMI\ByValue>start rmiregistry • Gọi trình Setup để đăng ký đối tượng PingServer: C:\RMI\ByValue>start java Setup Waiting for client request… Client send a Ball object weight 12 Ball weight before send to server 12 Ball weight after send to server 12 Ball weight return by server 27 31 GV: Võ Tấn Dũng • Chạy chương trình khách Client: C:\RMI\ByValue>java Client GV: Võ Tấn Dũng CHUYỂN ĐỐI TƯỢNG ĐẾN TRÌNH CHỦ THEO THAM CHIẾU CHUYỂN ĐỐI TƯỢNG THEO THAM CHIẾU • • • Nếu đối tượng lớn việc chuyển đối tượng qua mạng ảnh hưởng đến tốc độ chương trình Ta cho trình khách gọi từ xa trình chủ, trình khách không cần chuyển đối tượng cho trình chủ theo tham trị mà theo tham chiếu Như đối tượng trình khách phải cài đặt giao tiếp Remote, phải sinh lớp trung gian Stub Skel, phải đăng ký với rmiregistry để trình chủ tham chiếu đến (tương tự cài đặt trình chủ) Với Java, đối tượng cài đặt giao tiếp Remote xem có khả chuyển qua mạng thông qua tham chiếu không cần đóng gói chuyển theo tham trị trường hợp cài đặt lớp Serializable Cơ chế gọi ngược từ xa trình chủ đến trình khách thông qua tham chiếu gọi chế Callback Kỹ thuật gọi ngược thường hữu hiệu cho trình khách thiết lập yêu cầu tùy biến lệ thuộc nhiều vào trình chủ 33 GV: Võ Tấn Dũng • VÍ DỤ CHUYỂN ĐỐI TƯỢNG THEO THAM CHIẾU 34 GV: Võ Tấn Dũng • Sau ta xây dựng chương trình theo kỹ thuật Callback triệu gọi lẫn đối tượng trình khách đối tượng trình chủ thông qua chế tham chiếu • Ta tạo đối tượng AtClient chạy máy khách đối tượng AtServer chạy máy chủ VÍ DỤ CHUYỂN ĐỐI TƯỢNG THEO THAM CHIẾU (step 1) • Bước 1: Đặc tả giao tiếp interface cho đối tượng AtClient 35 GV: Võ Tấn Dũng /* AtClient.java*/ import java.rmi.*; public interface AtClient extends Remote { public void callClientMethod(String message) throws RemoteException; } VÍ DỤ CHUYỂN ĐỐI TƯỢNG THEO THAM CHIẾU (step 2) • Bước 2: Đặc tả giao tiếp interface cho đối tượng AtServer 36 GV: Võ Tấn Dũng /* AtServer.java*/ import java.rmi.*; public interface AtServer extends Remote { public void registerClient(AtClient c) throws RemoteException; public void callServerMethod(String message) throws RemoteException; } VÍ DỤ CHUYỂN ĐỐI TƯỢNG THEO THAM CHIẾU (step 3) • Bước 3: Cài đặt chi tiết cho đối tượng AtClient thông qua lớp AtClientImpl 37 GV: Võ Tấn Dũng /* AtClientImpl.java*/ import java.rmi.*; public class AtClientImpl implements AtClient { public void callClientMethod(String message) throws RemoteException{ System.out.println(message); } } VÍ DỤ CHUYỂN ĐỐI TƯỢNG THEO THAM CHIẾU (step 4) /* AtServerImpl.java*/ import java.rmi.*; public class AtServerImpl implements AtServer { AtClient client; public void registerClient(AtClient c) throws RemoteException{ client=c; } public void callServerMethod(String message) throws RemoteException{ System.out.println(message); for (int i=1; ijavac *.java • Tạo tập tin trung gian Stub Skel cho AtServer AtClient C:\RMI\ByRef>rmic AtServerImpl C:\RMI\ByRef>rmic AtClientImpl • Khởi động rmiregistry C:\RMI\ByRef>start rmiregistry • Cài đặt đối tượng máy chủ: C:\RMI\ByRef>start java Setup Chạy chương trình khách: C:\RMI\ByRef>java Client 41 GV: Võ Tấn Dũng • PHẦN GV: Võ Tấn Dũng MỘT SỐ VẤN ĐỀ KHÁC MỘT SỐ VẤN ĐỀ KHÁC • Một số vấn đề như: 43 GV: Võ Tấn Dũng – Tuần tự hóa đối tượng (Serializable) – Dùng đối tượng sản sinh nhiều đối tượng (Factory Object) – Gọi đối tượng từ xa phương pháp động (Dynamic Method Invoke) Xem Chương hai, sách “Java tập 2”, tác giả Phương Lan, NXB Thống Kê, năm 2004 GV: Võ Tấn Dũng HẾT BÀI [...]... từ xa của trình chủ đến trình khách thông qua tham chiếu còn được gọi là cơ chế Callback Kỹ thuật gọi ngược thường rất hữu hiệu cho trình khách thiết lập các yêu cầu tùy biến không phải lệ thuộc nhiều vào trình chủ 33 GV: Võ Tấn Dũng • VÍ DỤ CHUYỂN ĐỐI TƯỢNG THEO THAM CHIẾU 34 GV: Võ Tấn Dũng • Sau đây ta sẽ xây dựng chương trình theo kỹ thuật Callback triệu gọi lẫn nhau giữa đối tượng trên trình khách... server 27 31 GV: Võ Tấn Dũng • Chạy chương trình khách Client: C:\RMI\ByValue>java Client GV: Võ Tấn Dũng CHUYỂN ĐỐI TƯỢNG ĐẾN TRÌNH CHỦ THEO THAM CHIẾU CHUYỂN ĐỐI TƯỢNG THEO THAM CHIẾU • • • Nếu đối tượng quá lớn thì việc chuyển đối tượng qua mạng sẽ ảnh hưởng đến tốc độ của chương trình Ta có thể cho trình khách được gọi từ xa bởi trình chủ, như vậy trình khách không cần chuyển đối tượng cho trình chủ... hay phương thức từ 21 xa theo tham trị GV: Võ Tấn Dũng CHUYỂN THAM SỐ TRONG RMI GV: Võ Tấn Dũng CHUYỂN ĐỐI TƯỢNG ĐẾN TRÌNH CHỦ THEO THAM TRỊ CHUYỂN ĐỐI TƯỢNG THEO THAM TRỊ 23 GV: Võ Tấn Dũng • Tất cả các lớp đối tượng cài đặt giao tiếp Serializable đều được Java xem như là có khả năng tuần tự hóa Nghĩa là ta có thể yêu cầu Java lưu toàn bộ đối tượng lên đĩa cứng thành một tập tin nào đó, sau đó đem... DOS-prompt thứ ba để chạy chương trình CalculatorClient như sau: C:\RMI>java CalculatorClient Finding Object… 13 19 GV: Võ Tấn Dũng (kết quả trả về tổng của 12+1 chính là lời gọi đến phương thức addNum() của đối tượng CalculatorImpl Theo dõi cửa sổ DOS-prompt nơi chương trình CalculatorServer đang chạy ta sẽ thấy kết xuất sau: “Client request to calculate”.) PHẦN 3 GV: Võ Tấn Dũng VẤN ĐỀ CHUYỂN THAM SỐ TRONG... PingServer của ta có một phương thức ping() Phương thức này sẽ được gọi bởi trình khách Trình khách sử dụng phương thức ping() để ném quả bóng lên trình chủ thông qua tham số có kiểu đối tượng là Ball Phương thức ping() sau khi tiếp nhận sẽ ném trả về đối tượng Ball cho trình khách thông qua trị trả về của trình khách 26 GV: Võ Tấn Dũng /* PingServer.java*/ import java.rmi.*; public interface PingServer... Naming.bind(“rmi://localhost/Mycalculator”,c); System.out.println(“Register Calculator!”); } catch(Exception e) { System.out.println(e); } } } 13 GV: Võ Tấn Dũng //đăng ký đối tượng với bộ quản lý rmi Step 3: XÂY DỰNG CHƯƠNG TRÌNH PHÍA CLIENT Ở bước này ta thiết kế chương trình phía bên máy khách (client) có khả năng gọi và sử dụng đối tượng Calculator trên máy chủ (server), như sau: /* CalculatorClient.java*/ Import java.rmi.*; public... Ball ping(Ball b) throws RemoteException; } VÍ DỤ CHUYỂN ĐỐI TƯỢNG THEO THAM TRỊ (step 3) • Bước 3: Cài đặt chi tiết cho đối tượng PingServer thông qua lớp PingServerImpl với mã nguồn như sau: • Trình chủ tiếp nhận quả bóng từ trình khách, tăng trọng lượng của quả bóng lên và ném trả về cho trình khách 27 GV: Võ Tấn Dũng /* PingServerImpl.java*/ import java.rmi.*; public class PingServerImpl implements... CalculatorClient.java Tiến hành biên dịch như sau: 15 GV: Võ Tấn Dũng C:\RMI>javac CalculatorClient.java Step 5: SINH LỚP TRUNG GIAN STUB & SKETLETON Dựa vào lớp cài đặt CalculatorImpl.class, trình biên dịch rmic.exe của Java của Java sẽ cung cấp cho ta hai lớp trung gian Stub và Skeleton Mở của sổ DOS-promp (cmd) rồi đánh lệnh biên dịch sau: C:\RMI>rmic CalculatorImpl 16 GV: Võ Tấn Dũng Kết quả ta sẽ thu được hai tập... chương trình chuyển tham số đối tượng theo tham trị qua mạng từ máy khách đến máy chủ trong RMI • Chương trình này tựa trò chơi ném bóng, trình khách sẽ ném một một quả banh (đối tượng Ball) lên máy chủ, trình chủ sẽ tiếp nhận quả banh và trả về cho trình khách VÍ DỤ CHUYỂN ĐỐI TƯỢNG THEO THAM TRỊ (step 1) • Bước 1: Thiết kế lớp Ball.class được dùng làm tham số chuyền qua mạng giữa trình khách và trình. .. Trong thuật ngữ lập trình phân tán, quy trình chuyển tham số và dữ liệu qua lại giữa hai lớp trung gian Stub và Skeleton được gọi là mashaling và un-mashaling • Trong các lời gọi phương thức RMI, kiểu dữ liệu đối tượng nếu không cài đặt một trong hai giao tiếp Serializable hoặc Remote thì sẽ không thể dùng làm tham số truyền qua mạng được VÍ DỤ CHUYỂN ĐỐI TƯỢNG THEO THAM TRỊ 24 GV: Võ Tấn Dũng • Sau đây ... toán trả kết Stub phía client GV: Võ Tấn Dũng Stub RMI Client skeleton call PHẦN GV: Võ Tấn Dũng THIẾT KẾ ỨNG DỤNG PHÂN TÁN RMI CÁC BƯỚC XÂY DỰNG MỘT RMI 10 GV: Võ Tấn Dũng Định nghĩa giao tiếp từ... từ 21 xa theo tham trị GV: Võ Tấn Dũng CHUYỂN THAM SỐ TRONG RMI GV: Võ Tấn Dũng CHUYỂN ĐỐI TƯỢNG ĐẾN TRÌNH CHỦ THEO THAM TRỊ CHUYỂN ĐỐI TƯỢNG THEO THAM TRỊ 23 GV: Võ Tấn Dũng • Tất lớp đối tượng... java Setup Chạy chương trình khách: C:RMIByRef>java Client 41 GV: Võ Tấn Dũng • PHẦN GV: Võ Tấn Dũng MỘT SỐ VẤN ĐỀ KHÁC MỘT SỐ VẤN ĐỀ KHÁC • Một số vấn đề như: 43 GV: Võ Tấn Dũng – Tuần tự hóa

Ngày đăng: 03/12/2015, 13:56

TỪ KHÓA LIÊN QUAN

w