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

Báo cáo tìm hiểu về XML RPC trên python

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 (527.32 KB, 22 trang )

TRƯỜNG ĐẠI HỌC CẦN THƠ
KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
NIÊN LUẬN CƠ SỞ NGÀNH

MẠNG MÁY TÍNH VÀ TRUYỀN THÔNG
-----oOo-----

ĐỀ TÀI

LẬP TRÌNH ỨNG DỤNG PHÂN TÁN
VỚI XML-RPC PYTHON
Cán bộ hướng dẫn:

Thầy Đỗ Thanh Nghị
Sinh viên thực hiện:

Trần Phước Bình
B1509620

2018


MỤC LỤC

GIỚI THIỆU...............................................................................................1
Chương 1: TÌM HIỂU VỀ NGÔN NGỮ LẬP TRÌNH PYTHON..........2
1.1. Lịch sử ra đời của python…………………………………………
2
1.2.
Chu
trình


python…………………………………...2

phát

triển

1.3.
Môi
python………………………………………………..2

của
trường

1.4. Các dạng chương trình ứng dụng python…………………………
3
1.5.
Các
phân
tử
python……………………………………..3



sở

cua

1.5.1. Các từ khóa ……..…………………………………...3
1.5.2.
Tên

tên…………………………………...4



cách

1.5.3.
thích……………………………………………..4
1.6.
Các
kiểu
thủy……………………………………..4

dữ

đặt
Chú

liệu

nguyên

1.7. Khai báo các biến…………………………………………………
4
Chương
2:

TÍNH…………………………………….6

SỞ


MẠNG

MÁY

2.1:
Định
nghĩa
tính………………………………………..6

mạng

máy

2.2.
Phân
loại
tính………………………………………….6

mạng

máy

2.3. Một số kiến trúc mạng thường dùng………………………………
7


2.4.
Giao
mạng…………………………………………………...7


thức

2.4.1.
Giao
TCP/IP…………………………………….8

thức

1. Giao thức IP………………………………………8
2. Giao thức TCP……………………………………8
2.4.2.
Giao
UDP……………………………………….8

thức

2.5. Các mô hình hoạt động của mạng máy tính………………………
8
Chương 3: LẬP TRÌNH ỨNG DỤNG PHÂN TÁN VỚI XMLRPC……
9
3.1. Tổng quan về RPC…………………………………………..…...9
3.2. XML-RPC là gì………………………………………………......9
3.3. Tại sao sử dung XML-RPC…………………………………….9
3.4 XML-RPC hoạt động như thế nào………………………………9
3.5. Kiến trúc ứng dụng của XML-RPC……………………………
10
3.6. Cơ chế thực thi của XML_RPC………………………….
…….10
3.7. Một số đối tượng, hàm được sử dụng trong XML-RPC………

11

Chương 4: CHƯƠNG TRÌNH DEMO TÍNH SỐ PI ĐƠN GIẢN
BẰNG
XML-RPC
…………………...14

TRÊN

NGÔN

NGỮ

PYTHON

1. Số Pi và cách tính……………………………………………….14
1.1. Số Pi…………………..………………………………14
1.2. Cách tính số Pi……………………….………….........14
2. Xây dựng chương trình tính số Pi……………………………………..15
2.1. Bên máy Server………………………...………...…………….15
2.2. Bên máy khách (Client)……………………………...…………16


Chương 5: KÊT LUẬN …………………………………………………17
TÀI LIỆU THAM KHẢO……………………………………………….17


GIỚI THIỆU

Ngày nay, với sự phát triển như vũ bão của hệ thống mạng, điển hình là

mạng Internet đã khiến cho máy tính ngày càng trở nên gần gủi và phục vụ đắc
lực ở mọi lĩnh vực của cuộc sống của con người. Tuy nhiên, bên cạnh đó có một
thách thức lớn đặt ra cho các nhà phát triển ứng dụng là lập trình mạng ngày càng
trở nên phức tạp. Và hiện nay, mô hình lập trình đơn lẽ truyền thống đã bị thay
đổi rất nhiều, không còn đơn thuần ngồi viết những ứng dụng để chạy trên một
máy duy nhất. Chương trình ứng dụng đòi hỏi sự tương tác từ nhiều phía người
dùng, chia sẽ tài nguyên, triệu gọi từ xa, liên kết giao tác, phân tán dữ liệu,…Với
những yêu cầu trên mô hình Client/Server đã ra đời và tồn tại rất lâu cho đến
ngày nay. Theo mô hình Client/Server thì tất cả các xử lý phức tạp đều được
chuyển giao cho máy chủ (server) xử lý, máy khách (client) chỉ đóng vai trò là
gửi yêu cầu đến máy chủ để máy chủ xử lý và hiển thị kết quả nhận về lên màn
hình.
Hãy hình dung nếu chúng ta quản lý và phân phối ứng ựng của mình lên
hàng nghìn máy khách ở nhiều quốc gia khác nhau sẽ gây ra trở ngại về mặt địa
lý. Chúng ta cài đặt trình điều khiển kết nối cơ sở dữ liệu lên từng máy, sau một
thời gian sử dụng, nếu chúng ta muốn chuyển đổi hệ quản trị cơ sở dữ liệu này
sang hê quản trị cơ sỡ dữ liệu khác thì sẽ có rất nhiều khó khăn và phiền toái xãy
ra. Chúng ta phải yêu cầu hàng nghìn máy khách cập nhật lại trình điều khiển hệ
quản trị cơ sở dữ liệu, chưa kể việc cấu hình và kết nối với cơ sỡ dữ liệu chưa
chắc đã là đơn giản với người dùng. Hoặc khi muốn đổi mã nguồn của máy
khách, bao gồm rất nhiều MB thậm chí lên đến Gb thì phải cập nhật lại lượng dữ
liệu này cho tất cả các máy khách, thật sự điều này rất mất thời gian và khó khăn.
Từ những bất cập trên đã làm phát sinh ra mô hình phát triển ứng dụng đa
tầng (multi-tier). Các chương trình xử lý không còn phải đặt trên máy khách nữa
mà sẽ được cài đặt trên một server khác, làm cho máy khách trở nên gọn nhẹ, dê
dàng hơn trong việc cấu hình củng như thay đổi phía bên máy chủ. Nếu muốn
thay đổi hay cập nhật mã nguồn mới thì chỉ cần thay đổi phía bên server, các máy
khách kết nối vào server sẽ luôn được phục vụ phiên bản mới nhất.
Trong phạm vi của niên luận này, chúng ta sẽ tìm hiểu sơ lược về quá trình
hình thành và phát triển của ngôn ngữ lập trình Python, kiến thức cơ sở về mạng

máy tính và một đối tượng dùng để lập trình phân tán đó là XML-RPC. Tìm hiểu
khái niệm về RPC, XML-RPC, kiến trúc và cách hoạt động của XML-RPC củng
như kỹ thuật và một số vấn đề khi triển khai XML-RPC trên ngôn ngữ lập trình

1


Python. Phần cuối sẽ là phần chương trình demo tính số pi đơn giản và dùng
XML-RPC trên Python để thực thi chương trình.
Chương 1: TÌM HIỂU VỀ NGÔN NGỮ LẬP TRÌNH PYTHON
1.1. Lịch sử ra đời của python
Python là một ngôn ngữ lập trìnhbậc cao cho các mục đích lập trình đa
năng, do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991. Python được
thiết kế với ưu điểm mạnh là dê đọc, dê học và dê nhớ. Python là ngôn ngữ có
hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình.
Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh với số lần gõ phím
tối thiểu. Vào tháng 7 năm 2018, Van Rossum đã từ chức Leader trong cộng đồng
ngôn ngữ Python sau 30 năm lãnh đạo.
Python hoàn toàn tạo kiểu động và dùng cơ chế cấp phát bộ nhớ tự động; do vậy
nó tương tự như Perl, Ruby, Scheme, Smalltalk, và Tcl. Python được phát triển
trong một dự án mã mở, do tổ chức phi lợi nhuận Python Software
Foundation quản lý.
Ban đầu, Python được phát triển để chạy trên nền Unix. Nhưng rồi theo thời gian,
nó đã "bành trướng" sang mọi hệ điều hành từ MS-DOS đến Mac OS,
OS/2, Windows, Linux và các hệ điều hành khác thuộc họ Unix. Mặc dù sự phát
triển của Python có sự đóng góp của rất nhiều cá nhân, nhưng Guido van Rossum
hiện nay vẫn là tác giả chủ yếu của Python. Ông giữ vai trò chủ chốt trong việc
quyết định hướng phát triển của Python.
1.2. Chu trình phát triển của python
Sự phát triển Python đến nay có thể chia làm các giai đoạn:

Python 1: bao gồm các bản phát hành 1.x. Giai đoạn này, kéo dài từ
đầu đến cuối thập niên 1990. Từ năm 1990 đến 1995, Guido làm việc
tại CWI (Centrum voor Wiskunde en Informatica - Trung tâm Toán-Tin
học tại Amsterdam, Hà Lan). Vì vậy, các phiên bản Python đầu tiên đều do
CWI phát hành.
Python 2.0 đã được phát hành vào ngày 16 tháng 10 năm 2000 và có
nhiều tính năng mới, bao gồm bộ thu gom rác theo chu kỳ (cycle-detecting
garbage) và hỗ trợ Unicode. Với việc phát hành này quá trình phát triển đã
được thay đổi và trở nên minh bạch hơn và cộng đồng hậu thuẫn
Python 3.0 được phát hành năm 2008, sau một thời gian dài thử
nghiệm.
Cho tới hiện nay, Python đang có phiên bản 3.7

2


1.3. Đặc điểm
 Tính đa năng và cho phép sử dụng nhiều phương pháp lập trình.
 Ngôn ngữ lập trình đơn giản, dê học: Python có cú pháp rất đơn giản, rõ
ràng. Nó dê đọc và viết hơn rất nhiều khi so sánh với những ngôn ngữ lập
trình khác như C++, Java, C#.
 Miên phí, mã nguồn mở: Chúng ta có thể tự do sử dụng và phân phối
Python, thậm chí là dùng cho mục đích thương mại.
 Khả năng di chuyển: Các chương trình Python có thể di chuyển từ nền
tảng này sang nền tảng khác và chạy nó mà không có bất kỳ thay đổi nào.
Nó chạy liền mạch trên hầu hết tất cả các nền tảng như Windows, macOS,
Linux.
 Khả năng mở rộng và có thể nhúng
 Ngôn ngữ thông dịch cấp cao
 Thư viện tiêu chuẩn lớn để giải quyết những tác vụ phổ biến

 Hướng đối tượng
 Ngôn ngữ tốt để dạy lập trình
.

1.4. Các dạng chương trình ứng dụng python
 Lập trình ứng dụng web
 Khoa học và tính toán
 Tạo nguyên mẫu phần mềm
1.5. Các phần tử cơ sở của python
1.5.1. Các từ khóa
Từ khóa keyword là các từ dùng riêng của mỗi ngôn ngữ,
được dùng cho những mục đích nhất định và không thể định nghĩa lại nhằm mục
đích khác.
Python có ít từ khóa, có tất cả 33 từ khóa, các từ khóa này đều bằng tiếng
Anh và viết dưới dạng chữ thường. Tùy vào phiên bản Python bạn sử dụng mà số
lượng các từ khóa có thể khác nhau. Để lấy danh sách các từ khóa của phiên bản
hiện tại đang dùng, bạn sử dụng thư viện keyword và lệnh print
(keyword.kwlist).
1.5.2. Tên và cách đặt tên
Một chương trình sử dụng rất nhiều tên hay còn gọi là định
danh để làm tên chương trình, tên hàm, tên biến, tên hằng số… Tên trong Python
có độ dài tuỳ ý. Chúng có thể gồm cả chữ cái cả in hoa và in thường, các chữ số

3


và dấu gạch dưới, nhưng bắt buộc phải bắt đầu bằng một chữ cái hoặc dấu gạch
dưới.
Một số quy ước bắt buộc khi đặt tên của Python:


 Ký tự bắt đầu của tên phải là một dấu gạch dưới “_” hoặc một chữ cái
(có thể là chữ hoa hoặc chữ thường). Tiếp theo có thể bỏ trống, hoặc là
nhiều ký tự, hoặc nhiều con số.
 Trong tên không được có dấu cách trắng hoặc các ký tự đặc biệt như:
@,$.%^!=+–*/%&~`\
 Tên không được trùng với các từ khóa của Python.
1.5.3. Chú thích
Khi viết chương trình, đôi khi chúng ta cần ghi chú những
điểm quan trọng, để người khác và chính chúng ta sau này, đọc lại sẽ hiểu được
mã nguồn một cách tốt nhất. Lúc này chúng ta sẽ ghi chú trực tiếp vào mã nguồn,
các ghi chú này gọi là chú thíchcomment, trong chương trình mà không làm ảnh
hưởng tới chương trình, chương trình dịch sẽ bỏ qua các chú thích này.
Một dòng chú thích trong Python bắt đầu với kí tự #. Nếu chú thích trên
nhiều dòng thì đặt chúng vào trong cặp ngoặc “”.
1.6. Các kiểu dữ liệu nguyên thủy
Mỗi ngôn ngữ lập trình đều định nghĩa sẵn một số kiểu dữ liệu cơ bản gọi là
kiểu nguyên thủy.
Các kiểu dữ liệu trong python bao gồm:






Kiểu số
Kiểu chuổi (String)
Kiểu bộ (tuple)
Kiểu danh sách (List)
Kiểu từ điển (dictionary)


1.7. Khai báo các biến
Biến là một vị trí trong bộ nhớ được sử dụng để lưu trữ dữ liệu (giá trị).
Biến được đặt tên duy nhất để phân biệt giữa các vị trí bộ nhớ khác nhau. Các
quy tắc để viết tên một biến giống như quy tắc viết các định danh trong python.
Trong Python, bạn không cần khai báo biến trước khi sử dụng, chỉ cần gán cho
biến một giá trị và nó sẽ tồn tại. Cũng không cần phải khai báo kiểu biến, kiểu
biến sẽ được nhận tự động dựa vào giá trị mà bạn đã gán cho biến.
Python có một số kiểu dữ liệu thông dụng sau:

4




int , long : số nguyên (trong phiên bản 3.x long được nhập vào trong
kiểu int). Độ dài của kiểu số nguyên là tùy ý, chỉ bị giới hạn bởi bộ
nhớ máy tính.



float : số thực



complex : số phức, chẳng hạn 5+4j



list : dãy trong đó các phần tử của nó có thể được thay đổi, chẳng
hạn [8, 2, 'b', -1.5] . Kiểu dãy khác với kiểu mảng (array) thường gặp

trong các ngôn ngữ lập trình ở chỗ các phần tử của dãy không nhất
thiết có kiểu giống nhau. Ngoài ra phần tử của dãy còn có thể là một
dãy khác.



tuple : dãy trong đó các phần tử của nó không thể thay đổi.



str : chuỗi ký tự. Từng ký tự trong chuỗi không thể thay đổi. Chuỗi ký
tự được đặt trong dấu nháy đơn, hoặc nháy kép.



dict : từ điển, còn gọi là "hashtable": là một cặp các dữ liệu được gắn
theo kiểu {từ khóa: giá trị}, trong đó các từ khóa trong một từ điển
nhất thiết phải khác nhau. Chẳng hạn :
{1: "Python", 2: "Pascal"}



set : một tập không xếp theo thứ tự, ở đó, mỗi phần tử chỉ xuất hiện
một lần.

5


Chương 2: CƠ SỞ VỀ MẠNG MÁY TÍNH
2.1: Định nghĩa mạng máy tính

Mạng máy tính hay hệ thống mạng là sự kết hợp các máy tính lại với
nhau thông qua các thiết bị nối kết mạng và phương tiện truyền thông (giao thức
mạng, môi trường truyền dẫn) theo một cấu trúc nào đó và các máy tính này trao
đổi thông tin qua lại với nhau.

Hình 2.1. Mô hình liên kết các máy tính trong mạng
2.2. Phân loại mạng máy tính
Dựa theo sự phân bố của mạng nên được chia thành các loại mạng như
sau:
+ GAN (Golba Area Network) : GAN là mạng kết nối máy tính từ các châu
lục khác nhau. Thông thường kết nối này được thực hiện thông qua mạng viên
thông và vệ tinh.
6


+ WAN (Wide Area Network): WAN còn gọi là "mạng diện rộng", dùng
trong vùng địa lý lớn thường cho quốc gia hay cả lục địa, phạm vi vài trăm cho
đến vài ngàn km. Chúng bao gồm tập hợp các máy nhằm chạy các chương trình
cho người dùng. Các máy này thường gọi là máy lưu trữ(host) hay còn có tên
là máy chủ, máy đầ cuối (end system).
+ MAN (Metropolitan Area Network): MAN hay còn gọi là "mạng đô thị",
là mạng có cỡ lớn hơn LAN, phạm vi vài km. Nó có thể bao gồm nhóm các văn
phòng gần nhau trong thành phố, nó có thể là công cộng hay tư nhân.
+ LAN (Local Area Network): LAN hay còn gọi là "mạng cục bộ", là mạng
tư nhân trong một toà nhà, một khu vực (trường học hay cơ quan chẳng hạn) có
cỡ chừng vài km.
2.3. Một số kiến truc mạng thường dùng
+ Ring Topology

Hình 2.2. Ring Topology

+ Bus Topology

Hình 2.3. Bus Topology
+ Start topology

7


Hình 2.4. Start Topology
2.4. Giao thức mạng
Giao thức mạng (Protocol) là tập hợp các quy tắc và quy ước điều khiển
việc trao đổi thông tin (truyền thông) giữa các hệ thống máy tính hoặc các thiết bị
máy tính với nhau gọi là giao thức, và các máy tính muốn giao tiếp với nhau thì
phải có chung 1 giao thức.
Có nhiều loại giao thức được sử dung trong mạng máy tính như như
NetBEUI, DLC,…nhưng giao thức dduojc sử dung phổ biến hiên nay là TCP/IP.
2.4.1. Giao thức TCP/IP
1. Giao thức IP
IP (Internet Protocol) là một giao thức hướng dữ liệu
được sử dụng bởi các máy chủ nguồn và đích để truyền dữ liệu trong một liên
mạng chuyển mạch gói. Nhiệm vụ chính là cung cấp khả năng kết nối các mạng
con thanh liên kết mạng để truyền dữ liệu.
2. Giao thức TCP
TCP là giao thức hướng kết nối, tạo ra đường truyền
tin cậy giữa các thiết bị, thể hiện ở việc dữ liệu gửi luôn luôn đúng đích và theo
thứ tụ khi được gọi.
2.4.2. Giao thức UDP
UDP (User Datagram Protocol) là giao thức theo hướng
không liên kết, không cần thiết lập các kết nối trước, được sử dụng thay thế cho
TCP, không đảm bảo độ tin cậy khi truyền tin, thường được dụng trong các ứng

dụng truyền trực tiếp.
2.5. Các mô hình hoạt động của mạng máy tính
Mô hình hoạt động của máy tính được chia thành 2 loại:
+ Mô hinh hoạt động ngang hàng (Peer to Peer)
+ Mô hình máy chủ/máy khách (Clienr/Server)

8


Chương 3: LẬP TRÌNH ỨNG DỤNG PHÂN TÁN VỚI XML-RPC TRÊN
PYTHON
3.1. Tổng quan về RPC
 RPC (Remote Procedure Call) là kỹ thuật để xây dựng các ứng dụng phân tán
theo mô hình Client/Server.
 Là lời gọi thủ tục từ xa, mở rộng của lời gọi thủ tục cục bộ thông thường, là
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 (server).
 Sử dụng RPC sẽ giúp người lập trình sẽ tránh được các bước tiết trong lập
trình mạng.
3.2. XML-RPC là gì ?
XML-RPC là một cài đặt của RPC trên nền giao thức HTTP, sử
dụng ngôn ngữ XML để mã hoá và trao đổi dữ liệu. Với nó, một khách hàng có
thể gọi các phương thức với các tham số trên một máy chủ từ xa và lấy lại dữ liệu
có cấu trúc. XML-RPC được thiết kế đơn giản nhất có thể, đồng thời cho phép
các cấu trúc dữ liệu phức tạp được truyền, xử lý và trả về.
3.3. Tại sao sử dụng XML-RPC ?
XML-RPC là một cài đặt của RPC, dĩ nhiên là RPC còn có những cài đặt
khác, ví dụ như:
+ CORBA: là một trong những giao thức được sử dụng khá phổ biến để
phát triển các ứng dụng phân tán (distributed) hướng đối tượng (object-oriented).

CORBA thường gặp trong các chương trình đa tầng với qui mô “xí nghiệp”
(multi-tier enterprise application).

9


+ SOAP: SOAP cũng là một cài đặt RPC trên giao thức HTTP gần giống
như XML-RPC.
Vậy tại sao lại sử dụng XML-RPC ?
XML-RPC khá đơn giản so với CORBA và SOAP. Và hơn thế,
XML-RPC hoạt động khá tốt và cài đặt tương đối đơn giản với các ngôn ngữ lập
trình web phổ biến như PHP, Perl, Python. Với lý do đó, XML-RPC là sự lựa
chọn khá lý tưởng để phát triển các ứng dụng web qui mô nhỏ.
Và dĩ nhiên, XML-RPC vẫn có thể được cài đặt với các ngôn ngữ lập trình
desktop như C/C++, Java, và thậm chí với Microsoft .NET.
3.4. XML-RPC hoạt động như thế nào
Các chương trình được viết trên máy chủ (server), những máy khách
(client) dùng các cú pháp khác nhau tùy vào ngôn ngữ lập trình (c,c++, java,
python,…) để gọi chương trình, yêu cầu thực thi sẽ được mã hóa thành ngôn ngữ
XML và gửi đến máy chủ thông qua giao thức HTTP, máy chủ giải mã, thực thi
yêu cầu và trả về kết quả cho client theo cách tương tự.

Hình 3.1. Cách hoạt động của XML-RPC
3.5. Kiến trúc của XML-RPC
 Server gồm có 3 thành phần:
 Main Thread
 Server XML-RPC
 Một hoặc nhiều RPC handle

10



Hình 3.2. Kiến trúc server của XML-RPC
 Server xử lý yêu cầu của client gửi đến thông qua các RPC handle tương ứng.
3.6. Xây dựng ứng dụng phân tán XML-RPC trên python
 Máy khách (client):
1. Tạo một đối tượng để biểu diên máy chủ
Ví dụ:
Proxy = xmlrpc.client.ServerProxy("http://localhost:8000/")
2. Gọi máy chủ và nhận kết quả trả về.
Ví dụ:
print(server.examples.getStateName(41))
 Máy chủ (server)
1. Khai báo máy server, mô-đun SimpleXMLRPCServer chứa các lớp để
tạo nền tảng và cho biết nơi lắng nghe các yêu cầu gửi đến.
server=SimpleXMLRPCServer(('localhost',9000),logRequests=True )
2. Sau đó, chúng ta định nghĩa một hàm là một phần của dịch vụ và
đăng ký hàm để máy chủ biết cách gọi nó.
3. Đưa máy chủ vào vòng lặp vô hạn nhận và trả lời các yêu cầu.

3.7. Các đối tượng, hàm được sử dụng trong XML-RPC trên Python
 Máy khách (Client)
 Đối tượng ServerProxy
Một ServerProxycá thể có một phương thức tương ứng với mỗi cuộc
gọi thủ tục từ xa được chấp nhận bởi máy chủ XML-RPC. Việc gọi phương
thức thực hiện một RPC, được gửi đi bằng cả tên và ký hiệu đối số (ví dụ
như tên phương thức tương tự có thể bị quá tải với nhiều chữ ký đối
số). RPC kết thúc bằng cách trả lại một giá trị, có thể một trong hai trở lại
dữ liệu trong một loại tuân thủ QTI hoặc một Faulthoặc ProtocolError đối
tượng cho thấy có lỗi.

11


+ ServerProxy.system.listMethods( ): Phương thức này trả về một
danh sách các chuỗi
+ ServerProxy.system.methodSignature( tên ) : Phương thức này trả
về một mảng các chữ ký có thể cho phương thức này.
+ ServerProxy.system.methodHelp( tên ): Phương thức này trả về
một chuỗi tài liệu mô tả việc sử dụng phương thức đó.
 Đối tượng DataTime
xmlrpc.client.DateTime: Lớp này có thể được khởi tạo bằng giây kể từ thời
đại, một bộ thời gian, một chuỗi thời gian / ngày ISO 8601 hoặc
một datetime.datetime cá thể.
+ decode( chuỗi ): Chấp nhận một chuỗi làm giá trị thời gian mới của
cá thể.
+ encode( ra ): Viết mã hóa XML-RPC của DateTime
mục này vào đối tượng luồng ngoài .
 Đối tượng nhị phân
xmlrpc.client.Binary:
Lớp này có thể được khởi tạo từ dữ liệu byte (có thể bao gồm NUL). Quyền
truy cập chính vào nội dung của một Binary đối tượng được cung cấp bởi
một thuộc tính:
+ data: Dữ liệu nhị phân được gói gọn bởi Binarycá thể. Dữ liệu được
cung cấp dưới dạng bytes đối tượng.
+ decode( byte ): Chấp nhận bytes đối tượng base64 và giải mã nó
làm dữ liệu mới của cá thể.
+ encode( ra ): Viết mã hóa 64 cơ sở XML-RPC của mục nhị phân
này vào đối tượng luồng ra .
 Đối tượng lỗi
xmlrpc.client.Fault: Một Fault đối tượng bao bọc nội dung của một thẻ lỗi

XML-RPC. Các đối tượng lỗi có các thuộc tính sau:
+ faultCode: Một chuỗi chỉ ra loại lỗi.
+ faultString: Chuỗi chứa thông báo chẩn đoán liên quan đến lỗi.
 Các đối tượng ProtocolError
xmlrpc.client.ProtocolError: Một ProtocolErrorđối tượng mô tả lỗi giao
thức trong tầng truyền tải cơ bản (chẳng hạn như lỗi 404 'không tìm thấy'
nếu máy chủ được đặt tên bởi URI không tồn tại). Nó có các thuộc tính sau:
+ URL: URI hoặc URL đã kích hoạt lỗi.
+ errcode: Mã lỗi
+ errmsg: Thông báo lỗi hoặc chuỗi chẩn đoán.
+ headers: Một dict chứa các tiêu đề của yêu cầu HTTP / HTTPS đã kích
hoạt lỗi.

12


 Đối tượng MultiCall
Đối MultiCalltượng cung cấp một cách để gói gọn nhiều cuộc gọi đến
một máy chủ từ xa thành một yêu cầu duy nhất
xmlrpc.client.MultiCall( máy chủ ): Tạo một đối tượng được sử dụng để
gọi phương thức boxcar. máy chủ là mục tiêu cuối cùng của cuộc gọi.
 Convenience Functions
+ xmlrpc.client.dumps( params , methodname = None , methodresponse
= None , encoding = None , allow_none = False ): Chuyển
đổi params thành một yêu cầu XML-RPC.
+ xmlrpc.client.loads( dữ liệu , use_datetime = False , use_builtin_types
= False ): Chuyển đổi một yêu cầu hoặc phản hồi XML-RPC thành các đối
tượng Python.
 Máy chủ (Server)
 Các đối tượng SimpleXMLRPCServer

Các SimpleXMLRPCServerlớp học được dựa
trên socketserver.TCPServervà cung cấp một phương tiện của việc tạo
ra đơn giản, đứng một mình máy chủ XML-RPC.
+ SimpleXMLRPCServer.register_function( function = None , name
= None ): Đăng ký một hàm có thể đáp ứng các yêu cầu XML-RPC
+ SimpleXMLRPCServer.register_instance(): Đăng ký một đối tượng
được sử dụng để trưng ra các tên phương thức mà chưa được đăng ký sử
dụng register_function().
+ SimpleXMLRPCServer.register_introspection_functions( ): Đăng
ký chức năng nội suy XMLRPC system.listMethods, system.methodHelpvà system.methodSignatur
e.
+ SimpleXMLRPCServer.register_multicall_functions( ) : Đăng ký
hệ thống chức năng multicall XML-RPC.multicall.
+ SimpleXMLRPCRequestHandler.rpc_paths: Giá trị thuộc tính phải
là một danh sách các phần đường dẫn hợp lệ của URL để nhận các yêu
cầu XML-RPC.
 Các đối tượng DocXMLRPCServer
+ DocXMLRPCServer.set_server_title( server_title ):
Đặt tiêu đề
được sử dụng trong tài liệu HTML được tạo.
+ DocXMLRPCServer.set_server_name( server_name ): Đặt tên được
sử dụng trong tài liệu HTML được tạo.
+
DocXMLRPCServer.set_server_documentation( server_documentatio
n ): Đặt mô tả được sử dụng trong tài liệu HTML được tạo.

13


Chương 4: CHƯƠNG TRÌNH DEMO TÍNH SỐ PI ĐƠN GIẢN BẰNG XML-RPC

TRÊN NGÔN NGỮ PYTHON

1. Số Pi và cách tính
1.1. Số Pi
Số Pi ( ký hiệu là π ) là một hằng số toán học có giá trị bằng tỷ
số giữa chu vi của một đường tròn với đường kính của đường tròn đó. Hằng số
này có giá trị xấp xỉ bằng 3,1415926535897. Số π là một số vô tỉ, nghĩa là nó
không thể được biểu diên chính xác dưới dạng tỉ số của hai số nguyên. Nói cách
khác, nó là một số thập phân vô hạn không tuần hoàn.
1.2. Cách tính số Pi
Thoạt nhìn con số Pi tính được từ đường tròn, ta tưởng nó cũng giống
như những con số bình thường khác nhưng khi khảo sát sâu vào số thập phân thì
nó là con số kỳ bí. Ngày nay người ta biết hằng số Pi là số vô tỷ và còn là một
con số siêu việt vì nó không là nghiệm của bất kỳ một phương trình toán học đại
số nào hoặc nó cũng không thể lấy từ phân số của các số nguyên hay tự nhiên tác
tạo thành. Những con số thập phân của Pi đã được tính chính xác tới hàng tỷ con
số. Nhưng điều kỳ diệu là sự phân bố của những con số thập phân đó không theo
bất kỳ một dạng chuỗi hay dãy số đặc biệt nào đã được biết trong toán học, và
cho đến ngày nay người ta vẫn chưa thấy có khoảng chuỗi các con số lặp lại của
những số thập phân trong hàng tỷ con số đã tính được đó.
Từ sau thế kỉ XVII, với sự phát triển và hoàn thiện của phép tính vi phân,
tích phân, cách tính số π có sự thay đổi về bản chất. Có nhiều nhà khoa học đã
đưa ra cách tính số Pi khác nhau, Ví dụ như:

14


Vì số Pi là dãy số thập phân vô hạn không tuần hòa nên công thức được nhiều
người sử dụng và phổ biến hiện nay là phương pháp tính toán dựa vào khai triển
theo cấp số của các hàm lượng giác ngược.

Ví dụ: Hàm arctan

(|x| ≤ 1)
Và chú rằng arctan 1 = π/4. Trong công thức trên nếu
x = 1 ta sẽ thu được công thức :

(công thức Leibniz)
Suy ra số Pi có công thức là:

π = 4 * (1- +…+ + …)
2. Xây dựng chương trình tính số Pi

Do số Pi là số thập phân vô hạn theo công thức:

π = 4 * (1- +…+ + …) và cụm sẽ ngày càng nhỏ và dần về 0 nên
chúng ta sẽ cho 1 sống nguyên dương c > 0 để làm độ chính xác của số Pi (ví dụ
c=0.00001). Tổng được tính đến khi nào số n đủ lớn sao cho bất đẳng thức thỏa
mãn <= c thì chương trình sẽ dừng lại. Và dĩ nhiên số c càng nhỏ thì độ chính
xác của số Pi càng lớn.
2.1. Bên máy Server
+ Khai báo xmlrpc.server và đối tượng SimpleXMLRPCServer

from xmlrpc.server import SimpleXMLRPCServer
+ Viết chương trình tính số Pi theo công thứ trên
+ Cấu hình host và cổng port cho server

15


vd:


server = SimpleXMLRPCServer(("localhost", 8000))

Host trong vd trên là localhost và port là 8000
+ Dùng phương thức register_function để đăng ký tạo ra tên gọi cho
hàm tính số Pi.
+ server.serve_forever() để tiến hành chạy server
Sau đây là ví dụ về chương trình server tính số Pi:

2.2. Bên máy khách (Client)
+ Khai báo import xmlrpc.client

+ Nhập độ chính xác c
+ Dùng đối tượng ServerProxy để xác định máy chủ và cổng giao tiếp
VD: proxy = xmlrpc.client.ServerProxy("http://localhost:8000/")
+ Gọi chương trình trên máy chủ theo tên đối tượng định sẵn và in kết
quả nhân được ra màn hình.
Sau đây là ví dụ về chương trình client:

16


Chương 5: KẾT LUẬN
Có thể thấy XML-RPC nói riêng hay RPC nói chung là công cụ rất đắc lực
cho các nhà phát triển ứng dụng phân tán, bởi lập trình phân tán đang là xu thế
phát triển hiện nay. XML-RPC có cấu trúc đơn giản hơn những ngôn ngữ khác
nhưng lại đáp ứng hiểu quả cao trong việc lập trình các ứng dụng phân tán còn hỗ
trợ cho nhiều nền tảng và nhiều ngôn ngữ lập trình khác nhau nên có sự tùy biến
rất tiện lợi.
Sau thời gian nghiên cứu và tìm hiểu qua các tài liệu, những kết quả mà em

đã đạt được trong bài niên luận ngắn ngủi này bao gồm sơ lược lại các kiến thức
cơ bản của python và mạng máy tính, về cấu trúc củng như cách hoạt đông của
XML-RPC trên ngôn ngữ lập trình python. Do đây là lần đầu tiên tìm hiểu về đề
tài này và tài liệu của XML-RPC trên python củng ít ỏi nên không tránh khỏi
việc thiếu sót và một số điểm chưa chính xác. Vì thế em mong được thầy và các
bạn góp ý và sữa chữa để được hoàn thiện hơn.

TÀI LIỆU THAM KHẢO
Các website:
 XML-RPC Homefage ( /> XML-RPC for Pytron
( /> Microsoft DCOM

17


18



×