25/05/2018, 09:26

Mô hình Client – Server

Giới thiệu Trong mô hình này, chương trình ứng dụng được chia thành 2 thành phần: Quá trình chuyên cung cấp một số phục vụ nào đó, chẳng hạn: phục vụ tập tin, phục vụ máy in, phục vụ thư điện tử, phục vụ Web... Các quá trình ...

Giới thiệu

Trong mô hình này, chương trình ứng dụng được chia thành 2 thành phần:

Quá trình  chuyên cung cấp một số phục vụ nào đó, chẳng hạn: phục vụ tập tin, phục vụ máy in, phục vụ thư điện tử, phục vụ Web... Các quá trình này được gọi là các trình phục vụ hay Server.

Một số quá trình khác có yêu cầu sử dụng các dịch vụ do các server cung cấp được gọi là các quá trình khách hàng hay Client.

Việc giao tiếp giữa client và server được thực hiện dưới hình thức trao đổi các thông điệp (Message). Để được phục vụ, client sẽ gởi một thông điệp yêu cầu (Request Message) mô tả về công việc muốn server thực hiện. Khi nhận được thông điệp yêu cầu, server tiến hành phân tích để xác định công việc cần phải thực thi. Nếu việc thực hiện yêu cầu này có sinh ra kết quả trả về, server sẽ gởi nó cho client trong một thông điệp trả lời (Reply Message). Dạng thức (format) và ý nghĩa của các thông điệp trao đổi giữa client và server được qui định rõ bởi giao thức (protocol) của ứng dụng. 

Mô hình Client-Server

Ví dụ về dịch vụ Web.

Dịch vụ web được tổ chức theo mô hình Client -Server, trong đó:

Web server sẵn sàng cung cấp các trang web đang được lưu trữ trên đĩa cứng cục bộ của mình.

Web Client, còn gọi là các Browser, có nhu cầu nhận các trang web từ các Web Server

HTTP là giao thức trao đổi thông tin qua lại giữa Web client và Web Server.

Thông điệp yêu cầu là một chuỗi có dạng sau:

Command   URL    HTTP/Ver 

Thông điệp trả lời có dạng sau:

<HEADER>

<CONTENT>

Giả sử Client cần nhận trang Web ở địa chỉ http://www.cit.ctu.edu.vn/, nó sẽ gởi đến Web Server có tên www.cit.ctu.edu.vn thông điệp yêu cầu sau:

GET www.cit.ctu.edu.vn  HTTP/1.1

Server sẽ gởi về nội dung sau:

HTTP/1.0 200 OKDate: Mon, 24 Nov 2003 02:43:46 GMTServer: Apache/1.3.23 (Unix) (Red-Hat/Linux) mod_ssl/2.8.7 OpenSSL/0.9.6b DAV/1.0.3 PHP/4.1.2 mod_perl/1.26Last-Modified: Tue, 01 Jul 2003 08:08:52 GMTETag: "17f5d-2abb-3f014194"Accept-Ranges: bytesContent-Length: 10939Content-Type: text/htmlX-Cache: HIT from proxy.cit.ctu.edu.vnProxy-Connection: close

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML><HEAD><LINK href='favicon.ico' rel="SHORTCUT ICON">

...............................

Các chế độ giao tiếp

Quá trình giao tiếp giữa client và server có thể diễn ra theo hai chế độ là nghẽn (blocked) hay không nghẽn (Non blocked).

Chế độ nghẽn : 

Trong chế độ này, khi quá trình client hay server phát ra lệnh gởi dữ liệu,  (thông thường bằng lệnh send) , sự thực thi của nó sẽ bị tạm dừng cho đến khi quá trình nhận  phát ra lệnh nhận số dữ liệu đó (thường là lệnh receive).

Chế độ giao tiếp nghẽn

Tương tự cho trường hợp nhận dữ liệu, nếu  quá trình nào đó, client hay server, phát ra lệnh nhận dữ liệu, mà ở thời điểm đó chưa có dữ liệu gởi đến, sự thực thi của nó cũng tạm dừng cho đến khi có dữ liệu gởi đến.

Chế độ không nghẽn: 

Trong chế độ này, khi quá trình client hay server phát ra lệnh gởi dữ liệu, sự thực thi của nó vẫn được tiếp tục mà không quan tâm đến việc có quá trình nào phát ra lệnh nhận số dữ liệu đó hay không.

Chế độ giao tiếp không nghẽn

Tượng tự cho trường hợp nhận dữ liệu, khi quá trình phát ra lệnh nhận dữ liệu, nó sẽ nhận được số lượng dữ liệu hiện có (bằng 0 nếu chưa có quá trình nào gởi dữ liệu đến). Sự thực thi của quá trình vẫn được tiếp tục.

Trong thực tế cần chú ý đến chế độ giao tiếp nghẽn khi lập trình, vì nó có thể dẫn đến trường hợp chương trình bị "treo" do số lần gởi và nhận giữ liệu không bằng nhau giữa hai bên giao tiếp.

0