You are on page 1of 8

3/13/2015

Nội dung
• Tổng quan về lập trình phân tán
• Mô hình client-server
KỸ THUẬT LẬP TRÌNH PHÂN TÁN • Kiến trúc hướng dịch vụ & kiến trúc phân tán
• Kỹ thuật lập trình web
Mục tiêu: Cung cấp kiến thức cơ bản và chuyên • Kỹ thuật lập trình webservice
sâu về kỹ thuật lập trình phân tán. Minh họa và
thực hành bằng một ngôn ngữ cụ thể. Rèn • Kỹ thuật lập trình socket
luyện kỹ năng ứng dụng thực tế.
• Tổng kết

Tổng quan về lập trình phân tán Tổng quan về lập trình phân tán
• Hệ cô lập • 2 mô hình mạng máy
– Là một node tính toán riêng biệt (1 PC, mobile, …)
– Chương trình quản lý tài nguyên và truy xuất bộ nhớ trực tiếp tính
– Các kỹ thuật lập trình trong các phần trước viết cho hệ cô lập – Ngang hàng (peer to
• Hệ phân tán:
– Tập hợp các node tính riêng rẽ có thể làm việc độc lập và liên
peer)
kết để giải quyết công việc – Khách / Phục vụ
– Trong hệ phân tán, mỗi bộ xử lý nói chung có chương trình làm
việc riêng bán độc lập, vì lợi ích chung nên cần phối hợp hành (client – server)
động với nhau
– Chương trình trong môi trường phân tán gồm nhiều phần, chạy
trên các node khác nhau
– Chương trình trên mỗi node không thể trực tiếp truy xuất bộ nhớ
và tài nguyên của node khác mà phải gián tiếp và từ xa
– Hệ phân tán phổ biến nhất = Mạng máy tính
3 4

Tổng quan về lập trình phân tán Tổng quan về lập trình phân tán
• Cấu trúc chung của chương trình phân tán
– Chia thành nhiều phần
• Các mức lập trình phân tán phổ biến
– Mỗi phần chạy trên các node khác nhau, với môi trường – Lập trình mạng tầng ứng dụng
khác nhau • Lập trình web
– Các phần liên • Lập trình web service
lạc thông qua – Lập trình mạng tầng TCP/IP
cơ chế truyền • Lập trình socket
thông điệp – Socket = IP address + service port

5 6

1
3/13/2015

Môi trường & hoạt động của ứng dụng


Kỹ thuật lập trình Web
web
• Môi trường & hoạt động của ứng dụng web CLIENT SERVER

• Lập trình client trong ƯD web


• Lập trình phía server trong ƯD web
• Minh họa ƯD web làm việc ở tầng Application

Compiler phía client Một số compiler có sẵn


Một số compiler cần được tích hợp
7 8

Môi trường & hoạt động của ứng dụng Môi trường & hoạt động của ứng dụng
web web
• Phía client • Phía Server
– Trình duyệt web client (web browser): IE, Chrome, – Web server: IIS, Apache…
Firefox… • Giao tiếp với web browser để xử lý và hồi đáp các yêu
• Đóng vai trò chương trình dịch cho các ngôn ngữ phía client cầu người dùng
• Trình diễn nội dung văn bản theo định dạng của html và một • Cung cấp một số chương trình dịch cho ngôn ngữ lập
số ngôn ngữ client khác trình web phía server (ASP, ASP.Net). Tích hợp một số
• Làm cấu nối, cho phép người dùng tương tác với Web Server
Dịch và hiển thị file: html, javascript, CSS…
 Ngôn ngữ lập trình client: html, CSS, JavaScript,
Flash, ActiveX, java aplet…

9 10

Môi trường & hoạt động của ứng dụng


Các khái niệm cơ bản
web
Lập trình phía Server:
ASP, ASP.Net, PHP, Java, Perl, … • HTML (Hypertext Markup Language)
Lập trình phía Client:
HTML, Java Script, CSS
Hoạt động:
– Trang web (trên server) sẽ được biên
• Web Programming Language
(Cascading Style Sheets)
Hoạt động:
dịch và thi hành tại Web Server
• Web Server
– Kết quả tự động được chuyển sang
– Khi Web browser yêu HTML/JavaScript/CSS • Database Server
cầu một trang web – Khi Web browser yêu cầu một
– Web server tìm trang trang web • Web Browser
web mà Client yêu cầu – Web server tìm trang web mà
– Gửi về cho Client Client yêu cầu • URL (Uniform Resource Locator)
– Trả về cho Client
– Client nhận kết quả trả • HTTP (Hypertext Transfer Protocol)
về từ Server; Xử lý; – Client nhận kết quả trả về từ
hiển thị lên màn hình Server và hiển thị lên màn hình

11 12

2
3/13/2015

HTML (HyperText Markup Language) Các khái niệm cơ bản


• Ngôn ngữ dùng để xây dựng các trang web • Web Programming Language
• Gồm các tag giúp web browser biết cách định – Là ngôn ngữ lập trình được sử dụng để hỗ trợ và
tăng cường các khả năng của các ứng dụng web
dạng thông tin hiển thị
– Một số ngôn ngữ lập trình web thường được
dùng:
Ví dụ: nội dung trang web Chao.html
<html>
• Xử lý ở Client: Javascript, VBScript
<head><title>HP3 – ASP.NET</title></head> • Xử lý ở Server: ASP, PHP, JSP, ...
<body>
<h1 align=“center”>Chào mừng các bạn đến với ngôn ngữ HTML</h1>
</body>
</html>
13 14

Web Server và Web Client Trình duyệt web – Web Browser


• Web Server • Phần mềm dùng để xem các tài liệu hoặc tìm kiếm
– Máy tính lưu trữ website các tài nguyên trên World Wide Web
– Trả kết quả về cho Web Client khi nhận được yêu • Một số trình duyệt thông dụng hiện nay:
cầu – Internet Explorer của Microsoft
– Mozilla Firefox của Tập đoàn Mozilla
• Web Client – Chrome của Google
– Máy tính dùng để truy cập các trang web – Opera của Opera Software
– Có khả năng yêu cầu và nhận kết quả từ Web – Safari của Apple
Server

15 16

Ví dụ:URL (Uniform Resource Locator ) HTTP (HyperText Transfer Protocol)


http://www.legend.net.uk/resources/gloss.html
• Đường dẫn chỉ tới một trang web cụ thể trên Internet.
http://www.tuoitre.com.vn/Tianyon/Index.aspx?ArticleID=238657&ChannelID=3 • Là giao thức chuyển giao siêu văn bản trên
• Cú pháp đầy đủ:
http://www.htmlib.com:80/example_files/file.html?Lib=3 web
scheme://<host> [:port] [<path> [?<querystring>] ]
Trong đó: • Giao thức này là tập hợp các qui định dùng để
– scheme: lọai dịch vụ Internet trao đổi các tài liệu (văn bản, hình ảnh, âm
– host: địa chỉ máy chủ chứa tài nguyên
thanh, video, các tập tin đa truyền thông,…)
– port: cổng dịch vụ trên máy chủ
– path: đường dẫn và tên của tập tin tài nguyên trên máy chủ giữa Web server và trình duyệt Web
– querystring: các tham số được gửi kèm theo http

17 18

3
3/13/2015

Cơ chế tương tác từ người dùng đến Web Server Cơ chế tương tác từ người dùng đến Web Server

Request

Web Browser Web Server

Response
Html Html
Javascript Javascript
Css Css

PHP

19 20

Kỹ thuật lập trình socket


Case Study
• Giao tiếp trên Internet
• Yêu cầu:
• Dịch vụ Server và khái niệm cổng
– Triển khai 1 môi trường lập trình web
– Cấu hình web server • Giao tiếp Client/Server và Socket
– Xây dựng ứng dụng web đơn giản
• Các lớp cần thiết của gói thư viện java.net
• Thực hành với WAMP server
• Sử dụng TCP Socket
• Xây dựng chương trình ở Client
• Xây dựng chương trình ở Server
21

Trình ứng dụng và giao thức tầng ứng


Tầng ứng dụng
dụng
Mục đích: Nâng cao Trình ứng dụng : truyền thông, application

• Định nghĩa, sự hoạt  Các giao thức đặc biệt: các tiến trình phân tán
transport
network
data link
động của các giao – HTTP – Chạy trên các host(“user physical

thức trong tầng ứng space”)


dụng. – ftp – Trao đổi thông điệp.
– e.g., email, ftp, Web
– Kiểu khách - người – SMTP
phục vụ (client- Giao thức tầng ứng dụng
server) – pop – Là một phần của trình ứng
– Những mô hình – dns dụng. application
application transport

phục vụ – Xác đình thông điệp trao đổi transport


network
network

 Lập trình các ứng dụng giữa các ứng dụng. data link
data link
physical
– Tìm hiểu về các giao physical

thức trên tầng ứng mạng – Sử dụng các dịch vụ truyền


thông cung cấp bởi các giao
dụng thông qua các socket API thức tầng dưới (TCP, UDP)
ví dụ cụ thể.

4
3/13/2015

Một số thuật ngữ trình ứng dụng mạng Giao thức tầng ứng dụng
API: application Q: Phân biệt các tiến
Tiến trình : là chương trình • user agent: là phần programming interface trình bằng cách nào?
chạy trên host. mềm xử lý giao diện
• Định ra giao diện giữa – Địa chỉ IP của host.
• Trong cùng một host, hai giữa người dùng và
tầng ứng dụng và tầng
tiến trình có thể truyền mạng. – “Số hiệu cổng”: cho
mạng.
thông với nhau qua – Thực hiện theo các phép bên host nhận
interprocess • Socket : Internet API
giao thức tầng ứng phân biết các tiến
communication (điều dụng. – Hai tiến trình truyền trình cục bộ.
khiển bởi hệ điều hành). thông bằng cách
– Web: browser
gửi/đọc dữ liệu
• Các tiến trình chạy trên – E-mail: mail reader Dịch vụ Cổng
vào/từ socket. FPT 21
các host khác nhau
– streaming HTTP 80
truyền thông qua giao Telnet 23
audio/video: media Finger 79
thức tầng ứng dụng.
player SMTP 25

Các dịch vụ tầng giao vận cung cấp


cho ứng dụng? Các yêu cầu cho một số ứng dụng
Mất mát dữ liệu(Data loss) Băng thông(Bandwidth)
• Một số ứng dụng(e.g., audio) Application Data loss Bandwidth Time Sensitive
có thể chấp nhận một số mất  Một số ứng dụng(e.g.,
mát. multimedia) yêu cầu file transfer no loss elastic no
• Một số ứng dụng lại đòi hỏi băng thông tối thiểu để e-mail no loss elastic no
(e.g., file transfer, telnet) no
100% dữ liệu truyền tin cậy. có thể truyền thông hiệu Web documents loss-tolerant elastic
real-time audio/video loss-tolerant audio: 5Kb-1Mb yes, 100’s msec
quả. video:10Kb-5Mb
 Một số ứng dụng khác stored audio/video loss-tolerant same as above yes, few secs
interactive games loss-tolerant few Kbps up yes, 100’s msec
Thời gian(Timing) (“elastic apps”) lại có thể
financial apps no loss elastic yes and no
• Một số ứng dụng sử dụng bất cứ băng
(e.g.,hội thoại qua thông nào mà chúng
Internet,các trò chơi nhận được.
hành động) đòi hỏi độ
trễ thấp.

Dịch vụ của các giao thức giao Các ứng dụng trên Internet và giao
vận trên Internet thức giao vận tương ứng
Dịch vụ TCP: Dịch vụ UDP:
Application Underlying
• Hướng kết nối : Yêu cầu thiết • Truyền dữ liệu không tin Application layer protocol transport protocol
lập kết nối giữa client và cậy giữa các tiến trình
gửi và nhận. e-mail SMTP [RFC 821] TCP
server.
remote terminal access telnet [RFC 854] TCP
• Truyền dữ liệu tin cậy giữa • Không hỗ trợ : thiết lập Web HTTP [RFC 2068] TCP
tiến trình gửi và nhận kết nối, độ tin cậy, điều file transfer ftp [RFC 959] TCP
tiết luồng, điều tiết tắc streaming multimedia proprietary TCP or UDP
• Điều tiết luồng : bên gửi sẽ (e.g. RealNetworks)
nghẽn,thời gian,băng
không làm “lụt” bên nhận. remote file server NSF TCP or UDP
thông tối thiểu.
• Điều tiết tắc nghẽn: điều Internet telephony proprietary typically UDP
(e.g., Vocaltec)
chỉnh tốc độ gửi khi mạng
quá tải. Q: Tại sao một số ứng dụng
dùng UDP?
• Không hỗ trợ : thời gian,
băng thông tối thiểu.

5
3/13/2015

Lập trình Socket Lập trình Socket TCP


Mục đích : Nghiên cứu cách để xây dựng một ứng dụng
client/server application mà giao tiếp bằng socket. Socket: Là “cánh cửa” giữa tiến trình tầng ứng dụng và
giao thức giao vận end-end (UCP/TCP)
Socket API TCP: là dịch vụ truyền tin cậy theo bytes từ tiến trình
• introduced in BSD4.1 UNIX, Tạo,
socket này đến tiến trình khác.
sử dụng và huỷ bởi ứng dụng. a host-local, application-
created/owned,
• Sử dụng cho mô high client/server
OS-controlled interface
• Hai kiểu dịch vụ tần ứng dụng sử (a “door”) into which process Người phát triển
Người phát triển process điều khiển
dụng socket API: application process can điều khiển socket
socket
– Truyền datagram không tin cậy both send and TCP with
TCP with Điều khiển bởi
receive messages to/from Điều khiển bởi
buffers, buffers,
– Tin cậy, hướng kết nối theo internet variables
hệ điều hành
another (remote or hệ điều hành variables
byte. local) application process
host or host or
server server

Lập trình Socket TCP Lớp InetAddress


Client phải giao tiếp với server • Khi client tạo socket: client TCP • Quản lý địa chỉ theo tên và số IP.
thiết lập kết nối tới server TCP.
• Tiến trình trên server phải – static InetAddress getLocalHost(): trả về địa chỉ máy
• Khi nhận được giao tiếp từ
đang chạy. client,server TCP tạo socket cục bộ
• server phải tạo sẵn socket mới cho tiến trình trên server – static InetAddress getByName(String host): nhận địa
truyền thông với client
(door) để tiếp nhận yêu cầu – Cho phép server có thể đáp
chỉ máy kiểu chuỗi, trả về đối tượng InetAddress
của client. ứng yêu cầu của nhiều thay mặt cho địa chỉ máy này.
client. – public String getHostName(): trả về tên của đối
Client giao tiếp với server bắng
cách: tượng InetAddress theo dạng String.
• Tạo client-local TCP socket – public byte*+ getAddress(): trả về địa chỉ IP của đối
Trên quan điểm ứng dụng tượng InetAddress theo dạng mảng các byte.
• Xác định địa chỉ IP,số hiệu
cổng của tiến trình trên
TCP cung cấp dịch vụ truyền – public String getHostAddress(): trả về địa chỉ IP của
dữ liệu tin cậy theo bytes đối tượng InetAddress theo dạng String.
server. (kiểu đường ống) giữa
Client và server

Ví dụ: Chương trình lấy thông tin địa chỉ máy chủ Lớp Socket
import java.net.*;
public class AddrLookupApp { • Tạo kết nối từ máy khách tới máy chủ.
public static void main(String[] args) {
try { – public Socket(String host, int port): tạo một
if (args.length!=1) { kết nối theo địa chỉ host và số cổng port.
System.out.println("Usage: Java AddrLookupApp <HostName>"); – public Socket(InetAddress address, int port):
return;}
InetAddress host = InetAddress.getByName(args[0]);
tạo một kết nối theo địa chỉ là đối tượng
String hostName = host.getHostName(); InetAddress và số cổng port.
System.out.println("Host name:" + hostName); – public Socket(String host, int port, boolean
System.out.println("IP Address:" + host.getHostAddress()); stream): tạo một kết nối theo địa chỉ host và
} catch (UnknownHostException e) {
System.out.print("Address not found");
số cổng port, stream = true để quy định kết
return;} nối theo TCP, ngược lại, kết nối theo UDP
} (User Datagram Protocol).
}

6
3/13/2015

Các phương thức hỗ trợ của Lớp ServerSocket


lớp Socket • Tạo kết nối từ máy chủ tới máy khách.
– public ServerSocket(int port): tạo một đối
– InputStream getInputStream(): Lấy về luồng
tượng lắng nghe những kết nối từ máy khách
nhập để nhận dữ liệu.
theo số cổng port.
– OutputStream getOutputStream(): Lấy về
– Socket accept(): dừng lại chờ cho đến khi
luồng xuất để gửi dữ liệu.
nhận được kết nối và trả về đối tượng Socket
– int getPort(): Lấy về số hiệu cổng kết nối của của máy khách.
máy chủ.
– synchronized void close(): Cắt đứt kết nối với
– synchronized void close(): Cắt đứt kết nối với máy khách.
máy chủ.

Lập trình Socket TCP Tương tác socket Client/server : TCP


Ví dụ một ứng dụng client-server: keyboard monitor
Server Client
• Client đọc một dòng kí tự từ input create socket,
chuẩn (inFromUser stream) , gửi port=x, for
inFromUser

input
stream
incoming request:
tới server qua socket welcomeSocket =
Client ServerSocket()
(outToServer stream) Process Input stream:
process sequence of bytes TCP
• server đọc dòng kí tự trong into process
wait for incoming
connection request connection setup
create socket,
connect to hostid, port=x
output stream: clientSocket =
sockets sequence of bytes
connectionSocket =
Socket()
welcomeSocket.accept()
• server biến đổi dòng kí tự đó out of process
inFromServer
outToServer

send request using


thành dòng kí tự chỉ gồm các chữ output
stream
input
stream
read request from clientSocket
connectionSocket
hoa và gửi trả về cho client.
• client đọc,in ra dòng kí tự đã biến client TCP
clientSocket
write reply to
socket TCP
connectionSocket read reply from
đổi từ socket (inFromServer socket clientSocket
close
stream) to network from network
connectionSocket close
clientSocket

Ví dụ về Java Server (TCP) Ví dụ về Java Server (TCP)


import java.io.*;
import java.net.*; Tạo input stream, BufferedReader inFromServer =
class TCPClient { đính kèm vào trong new BufferedReader(new
socket InputStreamReader(clientSocket.getInputStream()));
public static void main(String argv[]) throws Exception
{ sentence = inFromUser.readLine();
String sentence;
String modifiedSentence; Gửi dòng kí tự
đến server outToServer.writeBytes(sentence + '\n');
Tạo input stream BufferedReader inFromUser = Đọc dòng kí tự modifiedSentence = inFromServer.readLine();
new BufferedReader(new InputStreamReader(System.in)); (đã biến đổi) gửi
Tạo client socket, về từ server System.out.println("FROM SERVER: " + modifiedSentence);
Socket clientSocket = new Socket("hostname", 6789);
kết nối tới server
clientSocket.close();
DataOutputStream outToServer =
Tạo output stream, new DataOutputStream(clientSocket.getOutputStream()); }
đính kèm vàosocket }

7
3/13/2015

Ví dụ về Java Server (TCP) Ví dụ về Java Server (TCP)


import java.io.*;
import java.net.*;
Tạo output stream,
class TCPServer { đính kèm vào
DataOutputStream outToClient =
public static void main(String argv[]) throws Exception
socket new DataOutputStream(connectionSocket.getOutputStream());
{ Đọc dòng kí tự
String clientSentence; clientSentence = inFromClient.readLine();
String capitalizedSentence;
trong socket
Tạo sẵn Socket
capitalizedSentence = clientSentence.toUpperCase() + '\n';
ở cổng 6789 ServerSocket welcomeSocket = new ServerSocket(6789);
Ghi dòng kí tự đã
outToClient.writeBytes(capitalizedSentence);
while(true) { biến đổi vào socket
Đợi đến khi có socket }
từ client gửi đến Socket connectionSocket = welcomeSocket.accept(); }
} Kết thúc vòng lặp while,
BufferedReader inFromClient = quay trở về vòng lặp cha,
Tạo input stream, new BufferedReader(new
đợi kết nối khác
InputStreamReader(connectionSocket.getInputStream()));
đính kèm vào socket

Tổng kết

45

You might also like