Tải bản đầy đủ (.doc) (22 trang)

TIỂU LUẬN LẬP TRÌNH MẠNG Lập trình bằng Java cho phép triệu gọi các chương trình ở xa thực hiện tính toán song song

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (379.64 KB, 22 trang )

ĐẠI HỌC ĐÀ NẴNG
ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN
LỚP KHOA HỌC MÁY TÍNH KHÓA 2009-2011

TIỂU LUẬN
LẬP TRÌNH MẠNG
Đề tài: Lập trình bằng Java cho phép triệu gọi các chương trình
ở xa thực hiện tính toán song song
Giáo viên hướng dẫn: PGS.TS. Lê Văn Sơn
Người thực hiện: Phan Phú Cường
Nguyễn Thị Thùy Dung
Lớp KHMT khóa 11 (2009-2011)
Đà Nẵng, 03/2010
Lời mở đầu
Sự bùng nổ của mạng internet cùng với các ứng dụng của nó đã đem lại cho xã
hội một cuộc sống tiện nghi. Mạng internet đã giúp cho con người bước vào một kỷ
nguyên công nghệ thông tin và tri thức. Để có được thành tựu đó thì lĩnh vực phân tán
trong hệ tin học cũng đóng một vai trò hết sức quan trọng.
Mục đích của lập trình mạng phân tán là tận dụng các khả năng tính toán và khai
thác dữ liệu của các hệ thống máy tính ở xa để thực hiện những tính toán nhanh hơn
trên cơ sở sử dụng nhiều bộ xử lý, nhiều bộ nhớ đồng thời hoặc nhiều dữ liệu quý giá
được phân tán khắp nơi. Trên nền hệ thống mạng máy tính được kết nối như hiện nay,
việc xử lý phân tán sẽ giải quyết được những bài toán lớn hơn, phức tạp hơn của thực
tế.
Trong phạm vi của tiểu luận này chúng tôi chỉ đề cập đến hai phần:
Phần 1 : Trình bày lý thuyết về Lập trình mạng phân tán và RMI
Phần 2 : Lập trình bằng Java cho phép triệu gọi các chương trình ở xa thực hiện
tính toán song song.
Chúng tôi xin chân thành cảm ơn: PGS.TS. Lê Văn Sơn và các bạn đồng môn đã giúp
chúng tôi hoàn thành tiểu luận này!


Tác giả
Lập trình mạng Lập trình mạng và RMI
PHẦN I: CƠ SỞ LÝ THUYẾT
LẬP TRÌNH MẠNG VÀ RMI
I.1. Lập trình mạng với Java
Trong lập trình Java thông thường thì tất cả các đối tượng tạo nên một chương
trình sẽ nằm trên cùng một máy và trong cùng một tiến trình hay trên cùng một máy ảo
Java (JVM).
Khi một đối tượng gọi một phương thức trên một đối tượng khác thì đối tượng
gọi phải biết địa chỉ vùng nhớ của đối tượng bị gọi và có thể chỉ thay đổi bộ đếm
chương trình máy để bắt đầu chạy trong một đối tượng mới. Địa chỉ của đối tượng
được gọi được lưu trữ trong ngăn xếp của máy, vì thế khi phương thức được gọi trả về
giá trị thì địa chỉ trong ngăn xếp sẽ được nạp lại vào trong bộ đếm chương trình máy
và tiếp tục thực thi trở lại trong đối tượng gọi. Dãy các bước trên là chung đối với tất
cả các ngôn ngữ lập trình mà thực thi trong một tiến trình đơn, trên cùng một máy.
Nền Java lý tưởng cho việc lập trình phân tán vì nhiều lý do:
- Nền Java định nghĩa một kích thước nhất quán và định dạng cho các kiểu cơ
bản, như kiểu số nguyên và số thực, cũng như việc thể hiện các số giống
nhau cho tất cả cài đặt trên nền. Đây là phương tiện để cơ chế chuyển tải có
thể được đơn giản hóa một cách quan trọng vì nó không phải thực hiện bất
kỳ dịch chuyển hay điều chỉnh nào khi nói chuyện với phía bên kia.
- Các hàm thư viện chính dành cho lập trình phân tán trên Java là RMI lại là
một phần trong phiên bản chuẩn của ngôn ngữ Java và vì thể nó có trên tất
cả các hệ thống hỗ trợ Java.
- Các bộ nạp lớp (classloader) của Java có thể tự động tải các đoạn mã bên
phía máy khách đối với mô hình nặng về phía máy khách hay các ứng dụng
ngang hàng.
- Các tham số của Java có thể được truyền tham chiếu hay tham trị.
- Nếu chúng ta không chắc rằng ngôn ngữ Java có trên tất cả các phía của một
ứng dụng phân tán, chúng ta vẫn có thể dùng ngôn ngữ để gọi các đối tượng

trên hệ thống khác được viết bằng một ngôn ngữ lập trình khác, ví dụ C++,
bằng cách sử dụng CORBA.
- Nền Java cũng hỗ trợ cho nhiều kỹ thuật lập trình phân tán khác nhu mô
hình lập trình socket.
Ưu điểm của việc tính toán phân tán:
- Tính toán phân tán được dùng khi có một nguồn tài nguyên trung tâm, ví dụ
như một cơ sở dữ liệu mà chúng ta muốn chia sẻ cho nhiều người sử dụng
KHMT khóa 2009 - 2011 Trang 1
Lập trình mạng Lập trình mạng và RMI
hay nhiều máy khách.
- Tính toán phân tán được dùng để kết hợp sức mạnh tính toán của nhiều hệ
thống để giải quyết một bài toán hiệu quả và nhanh hơn việc thực hiện với
một hệ thống đơn.
Nhiều hệ thống máy tính có thể được cấu hình theo nhiều cách để chia sẻ xử lý,
bao gồm chia sẻ bộ nhớ, chia sẽ đĩa, và còn chia sẻ kênh giao tiếp chung. Kỹ thuật gần
đây cho phép các hệ thống mà các thành phần vật lý ở xa nhau có thể hợp tác với nhau
trong việc giải quyểt các bài toán tính toán.
Cũng trên ảnh hưởng của chủ đề sức mạnh tính toán thì sự trỗi dậy của mạng
Internet và giao thức TCP/IP đi kèm cũng dẫn đến việc kết nối chưa hề thấy của hàng
triệu các hệ thống máy tính. Đối với một vài ứng dụng thì cần sức mạnh tính toán để
giải quyết các bài toán.
Sau đây là 3 mô hình đã từng ảnh hưởng đối với tính toán phân tán:
Thin client-server:
Mô hình này đã phổ biến hiện nay, với sự phổ biến của các trình duyệt web.
Trong mô hình này thì không có các đoạn mã của ứng dụng chạy trên máy khách –
máy khách thực hiện yêu cầu của các phản hồi nhận được từ máy chủ thông qua trình
duyệt web; máy chủ sẽ thực thi yêu cầu và gởi về các phản hồi cho máy khách. Đặc
tính đẹp nhất của mô hình này là một người dùng có thể thực thi ứng dụng một cách
tùy ý mà không cần phải cài đặt, và người dùng có thể chạy ứng dụng từ bất cứ nơi đâu
thông qua Internet. Mô hình này ít sử dụng đến các tính toán phân tán, trừ các giao

diện người dùng và một vài kiểm tra định dạng và các hàm xử lý đơn giản thông qua
các ngôn ngữ như JavaScript. RMI có thể được sử dụng như là một giao thức trong các
môi trường này nhưng nói chung thì không nên thay vào đó thì HTTP là giao thức phổ
biến hơn trong mô hình này.
Thick client-server:
Mô hình này được dùng khi cần nhiều xử lý bên phía máy khách. Thick client có
thể cung cấp một người dùng với một ứng dụng nhiều chức năng. Tuy nhiên phải có
một bước cài đặt để lấy mã người dùng cho ứng dụng trên máy người dùng. RMI thì
được dùng phổ biến trong mô hình này.
Peer-to-peer:
Nếu chúng ta đặt mối quan hệ giữa máy chủ và máy khách ngang nhau, cho phép
cả 2 có thể gởi yêu cầu cho nhau khi đó chúng ta có mô hình ngang hàng. Mô hình này
đang phát triển và ngày càng phổ biển, nhiều chương trình chia sẻ nhạc MP3 đều sử
dụng mô hình này. RMI có thể được dùng như một giao thức trong môi trường này.
Có rất nhiều kỹ thuật có sẵn hiện nay cho việc truyền đạt thông tin, như việc thực
KHMT khóa 2009 - 2011 Trang 2
Lập trình mạng Lập trình mạng và RMI
thi các đoạn mã chương trình từ xa, và phối hợp xử lý giữa các tiến trình trên cùng
máy hay các máy đặt xa nhau.
Một trong những kỹ thuật sớm nhất và vẫn còn phổ biến là mở đường liên kết để
truyền đạt thông tin giữa các tiến trình. Khi mà liên kết này được thiết lập thì một tiến
trình có thể gởi một luồng dữ liệu được mã hóa cho những hành động xác định và
thông tin cần truyền đạt đển một tiến trình khác. Tiến trình này sẽ giải mã luông thông
tin và thực hiện một hành động, thường là trả kết quả ngược lại cho tiến trình khởi tạo.
Lập trình Socket là một ví dụ của kỹ thuật này, một ví dụ khác là giao thức HTTP cho
phép chuyển các thông tin HTML mã hóa giữa máy khách và máy chủ.
Vấn đề của kỹ thuật này là người lập trình phải suy nghĩ ra một giao thức và sự
phối hợp các lệnh cho mỗi ứng dụng. Kỹ thuật này dẫn đến 2 biến hóa khác nhau là
gọi một thủ tục, mô hình truyền tham số địa phương tới ngôn ngữ lập trình và mô hình
xử lý lệnh cho lập trình socket. Bên cạnh đó cũng có những điểm khác biệt trong định

dạng dữ liệu và thứ tự chuẩn của các bit giữa 2 máy, từ đó làm phức tạp mã.
Một mô hình khác là triệu gọi thủ tục từ xa (RPCs). Ở đây, một lập trình viên có
thể gọi một thủ tục từ xa và truyền tham số ngược trở lại và về phía trước giống như
việc gọi một thủ tục cục bộ. Điều này cho phép phong cách lập trình giống nhau có thể
được dùng cho cả lập trình cục bộ và lập trình phân tán. Vẫn còn tồn tại vấn đề định
dạng dữ liệu và thứ tự chuẩn của các bit, ngoài ra RPC không tuân theo mô hình
hướng đối tượng.
RMI là một giải pháp của Java. RMI cho phép các mô hình lập trình giống nhau
để gọi các phương thức hướng đối tượng trên cùng máy cục bộ hay gọi phân tán, giả
sử rằng ngôn ngữ Java được dùng cho cả bên gọi và bên phương thức được gọi. RMI
cho phép các tham số có thể được truyền một trong 2 cách là:
- Truyền theo tham trị: khi một đối tượng mới được tạo ra trong một tiến trình
khác và một bản sao của tham số được tạo ra và đưa vào đối tượng mới.
- Truyền theo tham chiếu: một đối tượng không được tạo ra trong tiến trình khác
mà được tham chiếu đến từ xa.
I.2. Lời gọi thủ tục xa (RPC- Remote Procedure Call)
I.2.1. Giới thiệu
Lời gọi thủ tục xa là một cơ chế cho phép một chương trình có thể gọi thực thi
một thủ tục (hay hàm) trên một máy tính khác. Trong chương trình lúc này, tồn tại
hai loại thủ tục: thủ tục cục bộ và thủ tục ở xa.
- Thủ tục cục bộ là thủ tục được định nghĩa, cài đặt và thực thi tại máy
của chương trình.
- Thủ tục ở xa là thủ tục được định nghĩa, cài đặt và thực thi trên một máy tính
KHMT khóa 2009 - 2011 Trang 3
Lập trình mạng Lập trình mạng và RMI
khác.
Cú pháp giữa lời gọi thủ tục cục bộ và ở xa thì giống nhau. Tuy nhiên, khi một
thủ tục ở xa được gọi đến, một thành phần của chương trình gọi là Stub sẽ chuyển
hướng để kích hoạt một thủ tục tương ứng nằm trên một máy tính khác với máy của
chương trình gọi. Đối với người lập trình, việc gọi thủ tục xa và thủ tục cục bộ thì

giống nhau về mặt cú pháp. Đây chính là cơ chế cho phép đơn giản hóa việc
xây dựng các ứng dụng Client- Server. Trong hệ thống RPC, Server chính là máy
tính cung cấp các thủ tục ở xa cho phép các chương trình trên các máy tính khác gọi
thực hiện. Client chính là các chương trình có thể gọi các thủ tục ở xa trong quá trình
tính toán của mình.
Một Client có thể gọi thủ tục ở xa của nhiều hơn một máy tính. Như vậy sự thực
thi của chương trình Client lúc này không còn gói gọn trên một máy tính của Client
mà nó trải rộng trên nhiều máy tính khác nhau. Đây chính là mô hình của ứng
dụng phân tán (Distributed Application).
I.2.2. Kiến trúc của chương trình Client-Server cài đặt theo cơ chế RPC
Một ứng dụng Client-Server theo cơ chế RPC được xây dựng gồm có sáu phần
như sơ đồ dưới đây:
Hình 5.1 KiHình I.1. Kiến trúc chương trình kiểu RPC
Phần Client là một quá trình người dùng, nơi khởi tạo một lời gọi thủ tục từ xa.
KHMT khóa 2009 - 2011 Trang 4
Lập trình mạng Lập trình mạng và RMI
Mỗi lời gọi thủ tục ở xa trên phần Client sẽ kích hoạt một thủ tục cục bộ tương ứng
nằm trong phần Stub của Client.
Phần ClientStub cung cấp một bộ các hàm cục bộ mà phần Client có thể gọi.
Mỗi một hàm của ClientStub đại diện cho một hàm ở xa được cài đặt và thực thi trên
Server.
Mỗi khi một hàm nào đó của ClientStub được gọi bởi Client, ClientStub sẽ
đóng gói một thông điệp để mô tả về thủ tục ở xa tương ứng mà Client muốn thực
thi cùng với các tham số nếu có. Sau đó nó sẽ nhờ hệ thống RPCRuntime cục bộ
gởi thông điệp này đến phần Server Stub của Server.
Phần RPCRuntime quản lý việc truyền thông điệp thông qua mạng giữa máy
Client và máy Server. Nó đảm nhận việc truyền lại, báo nhận, chọn đường gói
tin và mã hóa thông tin. RPCRuntime trên máy Client nhận thông điệp yêu cầu từ
ClientStub, gởi nó cho RPCRuntime trên máy Server bằng lệnh send(). Sau đó gọi
lệnh wait() để chờ kết quả trả về từ Server.

Khi nhận được thông tiệp từ RPCRuntime của Client gởi sang, RPCRuntime
bên phía server chuyển thông điệp lên phần ServerStub. ServerStub mở thông điệp ra
xem, xác định hàm ở xa mà Client muốn thực hiện cùng với các tham số của nó.
ServerStub gọi một thủ tục tương ứng nằm trên phần Server.
Khi nhận được yêu cầu của ServerStub, Server cho thực thi thủ tục được yêu cầu
và gởi kết quả thực thi được cho ServerStub. ServerStub đóng gói kết quả thực
trong một gói tin trả lời, chuyển cho phần RPCRuntime cục bộ để nó gởi sang
RPCRuntime của Client. RPCRuntime bên phía Client chuyển gói tin trả lời nhận
được cho phần ClientStub. ClientStub mở thông điệp chứa kết quả thực thi về cho
Client tại vị trí phát ra lời gọi thủ
tục xa.
Trong các thành phần trên, RPCRuntime được cung cấp bởi hệ thống. ClientStub
và ServerStub có thể tạo ra thủ công (phải lập trình) hay có thể tạo ra bằng các công
cụ cung cấp bởi hệ thống.
Cơ chế RPC được hỗ trợ bởi hầu hết các hệ điều hành mạng cũng như các ngôn
ngữ lập trình.
I.3. Phương thức triệu gọi từ xa (RMI- Remote Method Invocation )
I.3.1. Giới thiệu
RMI là một sự cài đặt cơ chế RPC trong ngôn ngữ lập trình hướng đối tượng
Java. Hệ thống RMI cho phép một đối tượng chạy trên một máy ảo Java này có thể
kích hoạt một phương thức của một đối tượng đang chạy trên một máy ảo Java khác.
Đối tượng có phương thức được gọi từ xa gọi là các đối tượng ở xa (Remote Object).
Một ứng dụng RMI thường bao gồm 2 phần phân biệt: Môt chương trình Server
KHMT khóa 2009 - 2011 Trang 5
Lập trình mạng Lập trình mạng và RMI
và một chương trình Client.
Chương trình Server tạo một số các Remote Object, tạo các tham chiếu
(reference) đến chúng và chờ những chương trình Client kích hoạt các phương
thức của các Remote Object này.
Chương trình Client lấy một tham chiếu đến một hoặc nhiều Remote Object

trên Server và kích hoạt các phương thức từ xa thông qua các tham chiếu.
Một chương trình Client có thể kích hoạt các phương thức ở xa trên một hay
nhiều Server. Tức là sự thực thi của chương trình được trải rộng trên nhiều máy tính.
Đây chính là đặc điểm của các ứng dụng phân tán. Nói cách khác, RMI là cơ chế để
xây dựng các ứng dụng phân tán dưới ngôn ngữ Java.
I.3.2. Kiến trúc của RMI
Kiến trúc một chương trình Client-Server theo cơ chế RMI được mô tả như hình
dưới đây:
Hình I.2 - Kiến trúc chương trình kiểu RMI
Trong đó:
- Server là chương trình cung cấp các đối tượng có thể được gọi từ xa.
- Client là chương trình có tham chiếu đến các phương thức của các đối
tượng ở xa trên Server.
- Stub chứa các tham chiếu đến các phương thức ở xa trên Server.
- Skeleton đón nhận các tham chiếu từ Stub để kích hoạt phương thức
tương ứng trên Server.
- Remote Reference Layer là hệ thống truyền thông của RMI.
• Đầu tiên là tầng bao gồm hai lớp trung gian Stub và Skeleton,
chúng được hệ thống tạo ra theo yêu cầu. Các lớp này chặn các lời gọi
phương thức của chương trình khách (Client) tới các biến tham chiếu và gửi
tới dịch vụ triệu gọi từ xa. Lớp Skeleton liên lạc với Stub thông qua liên kết
KHMT khóa 2009 - 2011 Trang 6
Lập trình mạng Lập trình mạng và RMI
RMI. Nó đọc các tham số của lời triệu gọi từ xa từ một liên kết nào đó, thực
hiện lời gọi tới đối tượng thực thi dịch vụ từ xa và sau đó gửi các giá trị trả
lại cho Stub. Trong Java 2 SDK, các giao diện mới được xây dựng đã làm
cho Skeleton lỗi thời. RMI sử dụng phép ánh xạ để thực hiện việc kết nối tới
các đối tượng dịch vụ từ xa thay cho Skeleton.
• Tầng tham chiếu từ xa là tầng tiếp theo. Tầng này dịch và quản lý
các tham chiếu tới các đối tượng dịch vụ từ xa. Ở JDK1.1, tầng này thực hiện

két nối theo cơ chế điểm – tới - điểm. Đến Java 2 SDK, tầng này được cải
tiến để nâng cao việc hỗ trợ để kích hoạt các đối tượng dịch vu từ xa đang
chờ thực hiện thông qua ROA, đó là cách kết nối Client/Server.
• Tầng giao vận dựa trên kết nối TCP/IP giữa các máy tính trong
mạng. Ngay cả khi hai chương trình chạy trên hai JVM trong cùng một máy,
chúng cũng thực hiện kết nối thông qua TCP/IP của chính máy đó. Tầng giao
vận RMI được thiết kế để thiết lập một kết nối giữa máy Client với máy
Server.
Giả sử, ta có đối tượng C1 được cài đặt chạy trên máy phục vụ C. RMI của Java
giúp ta tạo ra hai lớp trung gian C1_Skel (không cần thiết đối với Java 2 SDK) và
C1_Stub. Lớp C1_Stub sẽ được nạp về máy khách B. Khi đối tượng B1 trên máy B
triệu gọi C1, máy ảo Java sẽ chuyển lời gọi đến lớp C1_Stub. C1_Stub sẽ chịu trách
nhiệm đóng gói các tham số và chuyển chúng qua mạng đến cho máy C. Tại máy C,
lớp C1_Skel (C1_Stub được nạp về và thay thế ở Java 2 SDK) sẽ nhận tham số để
chuyển vào không gian địa chỉ tương thích với đối tượng C1 sau đó gọi phương thức
tương ứng để thực hiện. Kết quả nếu có do phương thức của đối tượng C1 trả về sẽ
được lớp C1_Skel (C1_Stub thay thế ở Java 2 SDK) đóng gói trả ngược cho C1_Stub.
C1_Stub chuyển giao kết quả cuối cùng cho B1. Theo cơ chế này, có thể hình dung
như B1 đang trao đổi trực tiếp với đối tượng C1 ngay trên cùng một máy. Ngoài ra,
với sự trợ giúp của lớp trung gian C1_Stub, khi kết nối mạng gặp sự cố, lớp trung gian
Stub sẽ luôn biết cách thông báo lỗi đến đối tượng B1.
Thực tế có một câu hỏi là: Làm thế nào để B1 tham chiếu được đến C1 khi không
có lớp C1 nào được cài đặt ở máy B? C1_Stub trên máy B chỉ làm lớp trung gian
chuyển đổi tham số và thực hiện các giao thức mạng, nó không phải là hình ảnh của
đối tượng C1. Để làm được điều đó, lớp của đối tượng C1 cần cung cấp một giao diện
tương ứng, được gọi là giao diện từ xa với các phương thức cho phép đối tượng B1 gọi
nó trên máy B.
Stub thường trực trên máy khách, không ở trên máy chủ. Nó có vai trò đóng gói
các thông tin bao gồm:
- Định danh đối tượng từ xa cần sử dụng

KHMT khóa 2009 - 2011 Trang 7
Lập trình mạng Lập trình mạng và RMI
- Mô tả về phương thức cần triệu gọi
- Mã hoá các tham số và truyền cho Skel.
Stub sẽ chuyển những thông tin trên cho máy chủ. Ở phía máy chủ, đối tượng
Skel nhận thực hiện những công việc sau để gọi phương thức từ xa:
- Giải mã các tham số
- Xác định đối tượng để thực hiện lời gọi hàm tương ứng
- Thực hiện lời gọi phương thức theo yêu cầu
- Tập hợp kết quả để trả lời hoặc thông báo các lỗi ngoại lệ
Gửi trả lời gói các dữ liệu kết quả cho Stub ở trên máy khách.
Con đường kích hoạt một phương thức ở xa được mô tả như hình dưới đây:
Hình I.3 Cơ chế hoạt động của RMI
I.3.3. Stub và skeletons
Stub và skeleton được phát sinh ra từ đối tượng gọi và đối tượng được gọi bằng
cách sử dụng một công cụ biên dịch của RMI là rmic. Các trình đóng gói ứng dụng
phải đảm bảo là các stubs phải được đóng gói kèm theo với các đoạn mã bên phía máy
khách hay các tập tin JAR, và các skeleton phải đi kèm với các đoạn mã bên phía máy
KHMT khóa 2009 - 2011 Trang 8
Lập trình mạng Lập trình mạng và RMI
chủ hoặc các thư viện JAR
Các Stub có thể được tự động tải về từ máy chủ web khi có yêu cầu. Hình dưới
đây minh họa luồng dữ liệu giữa stub và skeleton trong kiến trúc của RMI
Hình I.4 Cơ chế hoạt động của Skel và Stub
I.3.4. Các cơ chế liên quan trong một ứng dụng đối tượng phân tán
Trong một ứng dụng phân tán cần có các cơ chế sau:
- Cơ chế định vị đối tượng ở xa (Locate remote objects): Cơ chế này xác
định cách thức mà chương trình Client có thể lấy được tham chiếu
(Stub) đến các đối tượng ở xa. Thông thường người ta sử dụng
một Dịch vụ danh bạ (Naming Service) lưu giữ các tham khảo đến

các đối tượng cho phép gọi từ xa mà Client sau đó có thể tìm kiếm.
- Cơ chế giao tiếp với các đối tượng ở xa (Communicate with remote
objects): Chi tiết của cơ chế giao tiếp với các đối tượng ở xa được cài
đặt bởi hệ thống RMI.
- Tải các lớp dạng bytecodes cho các lớp mà nó được chuyển tải qua lại
giữa Máy ảo (Load class bytecodes for objects that are passed around):
Vì RMI cho phép các chương trình gọi phương thức từ xa trao đổi các
đối tượng với các phương thức ở xa dưới dạng các tham số hay giá trị
trả về của phương thức, nên RMI cần có cơ chế cần thiết để tải mã
Bytecodes của các đối tượng từ máy ảo này sang máy ảo khác.
Hình dưới đây mô tả một ứng dụng phân tán dưới RMI sử dụng dịch vụ danh bạ
để lấy các tham khảo của các đối tượng ở xa. Trong đó:
- Server đăng ký tên cho đối tượng có thể được gọi từ xa của mình với
Dịch vụ danh bạ (Registry Server).
- Client tìm đối tượng ở xa thông qua tên đã được đăng ký
trên Registry Server (looks up) và tiếp đó gọi các phương thức ở
xa.
KHMT khóa 2009 - 2011 Trang 9
Lập trình mạng Lập trình mạng và RMI
- Hình minh họa cũng cho thấy cách thức mà hệ thống RMI sử
dụng một WebServer sẵn có để truyền tải mã bytecodes của các lớp
qua lại giữa Client và Server.

Hình I.5
Vai trò của dịch vụ tên
1.2.5.
Tiến trình vận hành của một ứng dụng Client-Server theo kiểu RMI diễn ra như
sau:
- Bước 1: Server tạo ra các
đối tượng cho phép gọi từ xa

cùng với các Stub và
Skeleton của chúng.
- Bước 2: Server sử dụng
lớp Naming để đăng ký
tên cho một đối tượng từ xa
(1).
- Bước 3: Naming đăng ký
Stub của đối tượng từ xa
với Registry Server (2).
- Bước 4: Registry Server sẵn
sàng cung cấp tham thảo đến
đối tượng từ xa khi có yêu
cầu (3).
- Client yêu cầu Naming định
vị đối tượng xa qua tên đã
được đăng ký (phương thức lookup) với dịch vụ tên (4).
- Naming tải Stub của đối tượng xa từ dịch vụ tên mà đối tượng xa đã đăng ký
KHMT khóa 2009 - 2011 Trang 10
Cơ chế vận hành của một ứng dụng RMI
Lập trình mạng Lập trình mạng và RMI
về Client (5).
- Cài đặt đối tượng Stub và trả về tham khảo đối tượng xa cho Client (6).
- Client thực thi một lời gọi phương thức xa thông qua đối tượng Stub (7).
1.3.6. Các lớp hỗ trợ RMI trong Java
Java hỗ trợ các lớp cần thiết để cài đặt các ứng dụng Client-Server theo kiểu RMI
trong các gói: java.rmi. Trong số đó các lớp thường được dùng là:
- java.rmi.Naming
- java.rmi.RMISecurityManager
- java.rmi.RemoteException;
- java.rmi.server.RemoteObject

- java.rmi.server.RemoteServer
- java.rmi. server.UnicastRemoteObject
I.4. Xây dựng một ứng dụng phân tán với RMI
Xây dụng một ứng dụng phân tán bằng cơ chế RMI gồm các bước sau:
1. Thiết kế và cài đặt các thành phần của ứng dụng.
2. Biên dịch các chương trình nguồn và tạo ra Stub và Skeleton.
3. Tạo các lớp có thể truy xuất từ mạng cần thiết.
4. Khởi tạo ứng dụng
KHMT khóa 2009 - 2011 Trang 11
Hình I.6 Cơ chế vận hành của một ứng dụng RMI
Lập trình mạng Lập trình mạng và RMI
I.4.1. Thiết kế và cài đặt các thành phần của ứng dụng
Đầu tiên chúng phải xác định lớp nào là lớp cục bộ, lớp nào là lớp được gọi từ
xa. Nó bao gồm các bước sau:
- Định nghĩa các giao diện cho các phương thức ở xa (remote interfaces): Một
remote interface mô tả các phương thức mà nó có thể được kích hoạt từ xa
bởi các Client. Đi cùng với việc định nghĩa Remote Interface là việc xác định
các lớp cục bộ làm tham số hay giá trị trả về của các phương thức được gọi
từ xa.
- Cài đặt các đối tượng từ xa (remote objects): Các Remote Object phải cài đặt
cho một hoặc nhiều Remote Interfaces đã được định nghĩa. Các lớp
của Remote Object class cài đặt cho các phương thức được gọi từ xa đã được
khai báo trong Remote Interface và có thể định nghĩa và cài đặt cho cả các
phương thức được sử dụng cục bộ. Nếu có các lớp làm đối số hay giá trị trả
về cho các phương thức được gọi từ xa thì ta cũng định nghĩa và cài đặt
chúng.
- Cài đặt các chương trình Client: Các chương trình Client có sử dụng
các Remote Object có thể được cài đặt ở bất kỳ thời điểm nào sau khi các
Remote Interface đã được định nghĩa.
Ví dụ: định nghĩa các giao tiếp (interface) phía client:

import java.rmi.*;
import java.util.*;
public interface ClientInfhc extends Remote
{
public Vector queryth(String nam, String server)throws RemoteException;
public Vector querytdo(String nam, String server) throws RemoteException;
public Vector qsinh(String nam, String sv, String y) throws RemoteException;
public Vector timkiemten(String nam,String server,String name)throws
RemoteException;
public Vector timkiemmaso(String nam,String server,String code)throws
RemoteException;
}
Ví dụ: định nghĩa các giao tiếp (interface) phía server:
import java.rmi.*;
import java.util.*;
KHMT khóa 2009 - 2011 Trang 12
Lập trình mạng Lập trình mạng và RMI
import javax.swing.tree.*;
public interface ServerInf extends Remote{
public void ketnoi() throws RemoteException;
public void login(String name, String pass, String server, String host)throws
RemoteException;
public void logout(String name, String pass, String server, String host)throws
RemoteException;
public Vector tonghop()throws RemoteException;
public Vector trinhdo()throws RemoteException;
public Vector sinh(String year)throws RemoteException;
public Vector getaddress()throws RemoteException;
public void registerclient(ClientInf c)throws RemoteException;
public void registerclienthc(ClientInfhc c)throws RemoteException;

}
I.4.2. Biên dịch các tập tin nguồn và tạo Stubs và Skeleton
Giai đoạn này gồm 2 bước: Bước thứ nhất là dùng chương trình biên dịch javac
để biên dịch các tập tin nguồn như các remote interface, các lớp cài đặt cho các remote
interface, lớp server, lớp client và các lớp liên quan khác. Kế tiếp ta dùng trình biện
dịch rmic để tạo ra stub và skeleton cho các đối tượng từ xa từ các lớp cài đặt cho các
remote interface.
Ví dụ: dịch các chương trình .java sang class
javac *.java
Ví dụ: tạo Stub và Skeletion
rmic ServerImpl
rmic ClientImpl
I.4.3. Tạo các lớp có thể truy xuất từ mạng
Tạo một tập tin chứa tất cả các file có liên quan như các remote interface stub,
các lớp hỗ trợ mà chúng cần thiết phải tải về Client và làm cho tập tin này có thể truy
cập đến thông qua một Web server.
I.4.4. Thực thi ứng dụng
Thực thi ứng dụng bao gồm việc thực thi rmiregistry server, thực thi server, và
thực thi client.
KHMT khóa 2009 - 2011 Trang 13
Lập trình mạng Lập trình mạng và RMI
Ví dụ: đăng ký RMI.
rmiregistry
Tóm
l

i các
công

việ

c
phả
i
làm

là:
- Tạo giao diện (interface) khai báo các phương thức được gọi từ xa của
đối tượng.
- Tạo lớp cài đặt (implement) cho giao diện đã được khai báo.
- Viết chương trình Server.
- Viết chương trình Client.
- Dịch các tập tin nguồn theo dạng RMI để tạo ra các lớp tương ứng và
stub cho client, skeleton cho server.
- Khởi động dịch vụ registry.
- Thực hiện chương trình Server.
- Thực thi chương trình Client.
KHMT khóa 2009 - 2011 Trang 14
Lập trình mạng Bài tập
PHẦN II: BÀI TẬP
1. Lập trình bằng Java cho phép triệu gọi các chương trình ở xa thực hiện tính
toán song song
2. Xây dựng các Agent tính toán
3. Gửi Agent đến các Server (giả bộ xử lý) khác nhau
4. Gọi thực hiện từ xa các Agent này để tính toán song song 1 vấn đề xác định
trước
5. Nhận các kết quả trung gian từ Agent và tập hợp thành kết quả cuối cùng
II.1. Phân tích bài toán:
Ứng dụng lý thuyết lập trình mạng và RMI đã trình bày ở trên để xây dựng
chương trình nhằm giải quyết bài toán quản lý dân số của thành phố Đà Nẵng.
Trong bài toán này ta xét hai phía là server và client. Phía client có chức năng

cập nhật số liệu về dân số (trẻ sơ sinh, trình độ dân số, tỉ lệ nam nữ,…) từng khu vực
quản lý và gửi lên cho server. Phía server có chức năng tổng hợp số liệu từ các client
và xử lý theo yêu cầu của người sử dụng. Mỗi quận là một client đảm nhận chức năng
cập nhật số liệu trong quận. Khi có yêu cầu cập nhật số liệu toàn thành phố, server yêu
cầu các client xử lý và chuyển số liệu từ các quận lên để tổng hợp số liệu cho toàn
thành phố.
II.2. Thiết kế chương trình
Mô hình thiết kế chưong trình như sau: Xây dựng hệ thống gồm một Server xử lý
số liệu chung cho toàn thành phố và các client, mỗi client quản lý số liệu của một
quận. Ứng dụng công nghệ RMI và khai phá tri thức từ cơ sở dữ liệu để xây dựng hệ
thống theo yêu cầu trên.
II.3. Kết quả demo
Form đăng nhập hệ thống:
KHMT khóa 2009 - 2011 Trang 15
Lập trình mạng Bài tập
Form giao diện chính của hệ thống:
Form cập nhật thông tin từ các client:
KHMT khóa 2009 - 2011 Trang 16
Lập trình mạng Bài tập
Form dự đoán số lượng trẻ em:
Đồ thị tỉ lệ trẻ sinh trong năm:
KHMT khóa 2009 - 2011 Trang 17
Lập trình mạng Bài tập
Form cập nhật thong tin phí client:
KHMT khóa 2009 - 2011 Trang 18
Lập trình mạng Tài liệu tham khảo
TÀI LIỆU THAM KHẢO

[1] Hệ tin học phân tán – TS. Lê Văn Sơn, Nhà xuất bản Đại học quốc gia TP. Hồ
Chí Minh.

[2] Java lập trình mạng – Nguyễn Phương Lan, Hoàng Đức Hải, Nhà xuất bản lao
động – xã hội.
[3] Java tập 2 – Nguyễn Phương Lan, Nhà xuất bản thống kê
[4] Distributed Systems (Concepts and Design) – George Coulouris, Jean
Dollimore và Tim Kindberg.
[5] Advances in Distributed and Parallel Knowledge Discovery – Hillol Kargupta
và Philip Chan.
KHMT khóa 2009 - 2011 Trang 19
MỤC LỤC

PHẦN I: CƠ SỞ LÝ THUYẾT 1
LẬP TRÌNH MẠNG VÀ RMI 1
I.1. Lập trình mạng với Java 1
I.2. Lời gọi thủ tục xa (RPC- Remote Procedure Call) 3
I.2.1. Giới thiệu 3
I.2.2. Kiến trúc của chương trình Client-Server cài đặt theo cơ chế RPC 4
I.3. Phương thức triệu gọi từ xa (RMI- Remote Method Invocation ) 5
I.3.1. Giới thiệu 5
I.3.2. Kiến trúc của RMI 6
I.3.3. Stub và skeletons 8
I.3.4. Các cơ chế liên quan trong một ứng dụng đối tượng phân tán 9
1.2.5. 10
Cơ chế vận hành của một ứng dụng RMI 10
1.3.6. Các lớp hỗ trợ RMI trong Java 11
I.4. Xây dựng một ứng dụng phân tán với RMI 11
I.4.1. Thiết kế và cài đặt các thành phần của ứng dụng 12
I.4.2. Biên dịch các tập tin nguồn và tạo Stubs và Skeleton 13
I.4.3. Tạo các lớp có thể truy xuất từ mạng 13
I.4.4. Thực thi ứng dụng 13
PHẦN II: BÀI TẬP 15

II.1. Phân tích bài toán: 15
II.2. Thiết kế chương trình 15
II.3. Kết quả demo 15
TÀI LIỆU THAM KHẢO 19
MỤC LỤC 20

×