Chuyển ñố it ượng theo tham chiếuChuyển ñối tượng theo tham chiếu

Một phần của tài liệu Chương 12: Lập trình mạng doc (Trang 69 - 78)

Chuyn ñối tượng theo tham chiếu

Nếu ñối tượng quá lớn 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 ñối tượng trên trình khách phải cài ñặt giao tiếp

Remote, sinh lớp trung gian Stub, Skel, ñăng ký rmiregistry ñể trình chủ có thể tham chiếu ñến.

Cơ chế gọi ngược 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

Ví d

Ví d

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 và ñối tượng trên trình chủ thông qua cơ chế tham chiếu.

Tạo một ñối tượng AtClient chạy trên máy khách. Tạo một ñối tượng AtServer chạy trình máy chủ.

Ví d

Ví d -- BBướước 1c 1

ðặt tả giao tiếp interface cho ñối tượng AtClient /*AtClient.java*/

import java.rmi.*;

public interface AtClient extends Remote {

public void callClientMethod(String message)

throws RemoteException; }

Ví d

Ví d -- BBướước 2c 2

ðặt tả giao tiếp interface cho ñối tượng AtServer /*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

Ví d -- BBướước 3c 3

Cài ñặt chi tiết cho ñối tượng AtClient thông qua lớp AtClientImpl

/*AtClientImpl.java*/

import java.rmi.*;

public class AtClientImpl implements AtClient{

public void callClientMethod(String message)

throws RemoteException {

System.out.println(message); }

Ví d

Ví d -- BBướước 4c 4

Cài ñặt chi tiết cho ñối tượng AtServer

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; i<10; i++){

String msg= "Server response "+ Math.random()*1000; client.callClientMethod(msg);

}} }

}

Ví d

Ví d -- BBướước 5c 5

/*Setup.java*/

import java.rmi.*;

import java.rmi.server.*;

public class Setup{

public static void main(String args[]) throws Exception {

AtServer server = new AtServerImpl();

//Thông báo khả năng giao tiếp ñược từ xa của ñ/t với máy ảo java

UnicastRemoteObject.exportObject(server);

//ðăng ký ñối tượng với rmiregistry

Naming.bind("rmi://localhost/serverobject", server); System.out.println("Waiting for client request ...");

Ví d

Ví d -- BBướước 6c 6

Chương trình Client gọi phương thức của ñ/t AtServer

import java.rmi.*;

import java.rmi.server.*;

public class Client {

public static void main(String args[]) throws Exception{ AtClient client = new AtClientImpl();

UnicastRemoteObject.exportObject(client); AtServer server =

(AtServer)Naming.lookup("rmi://localhost/serverobject"); server.registerClient(client);

server.callServerMethod("Client Contact Server"); }

}

Ví d

Ví d -- BBướước 7c 7

Biên dịch và chạy chương trình C:\RMI\ByRef>javac *.java

Sinh lớp trung gian Stub, Skel cho AtServer và 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 trên máy chủ

C:\RMI\ByRef>start java Setup

Một phần của tài liệu Chương 12: Lập trình mạng doc (Trang 69 - 78)

Tải bản đầy đủ (PDF)

(78 trang)