Bài giảng này trang bị cho người học những hiểu biết về lập trình máy chủ với những nội dung cơ bản như: Khái niệm các loại máy chủ; máy chủ xứ lý đồng thời, đa tiến trình, hướng kết nối; ví dụ về Máy chủ xử lý đồng thời, đa tiến trình, hướng kết nối; máy chủ xử lý đồng thời, đơn tiến trình, hướng kết nối;... Mời các bạn cùng tham khảo.
Lập trình máy chủ Giáo viên: Nguyễn Hồi Sơn Bộ mơn Mạng Truyền thơng máy tính Trường Đại học Công nghệ Network programming Nội dung học Khái niệm loại máy chủ Máy chủ xứ lý đồng thời, đa tiến trình, hướng kết nối Ví dụ Máy chủ xử lý đồng thời, đa tiến trình, hướng kết nối Máy chủ xử lý đồng thời, đơn tiến trình, hướng kết nối Ví dụ Máy chủ xử lý đồng thời, đơn tiến trình, hướng kết nối Network programming Đặt vấn đề Yêu cầu với máy chủ: Đảm bảo chất lượng dịch vụ Chi phí thấp Đáp ứng đồng thời yêu cầu nhiều máy khách lúc Thời gian đáp ứng yêu cầu máy khách nhỏ Dung lượng nhớ sử dụng, tài ngun tính tốn Dễ thiết kế, xây dựng bảo trì Network programming Phân loại máy chủ theo cách thức cung cấp dịch vụ Tuần tự Đồng thời Không kết nối Tuần tự không kết nối Đồng thời không kết nối Hướng kết nối Tuần tự hướng kết nối Đồng thời hướng kết nối Network programming Máy chủ không kết nối Máy chủ sử dụng giao thức UDP Ưu điểm Khơng có kết nối máy khách máy chủ Chỉ cần socket Thích hợp với kiểu truyền tin quảng bá/quảng phát Người lập trình tự lựa chọn cách thức thực thi tính tin cậy truyền tin Nhược điểm Cung cấp tính tin cậy địi hỏi chi phí cao với người lập trình Network programming Máy chủ hướng kết nối Máy chủ sử dụng giao thức TCP Ưu điểm Sử dụng khái niệm kết nối truyền tin Chấp nhận kết nối từ máy khách Tất thông tin gửi qua kết nối máy chủ máy khách Đóng kết nối sau kết thúc truyền tin Truyền tin tin cậy Nhược điểm Chi phí cao: phải tạo socket riêng cho kết nối với máy khách Network programming Khái niệm xử lý tuần tự/xử lý đồng thời Chương trình xử lý Một tiến trình/một luồng điều khiển việc xuất nhập liệu Xử lý yêu cầu máy khách Dễ thực Chương trình xử lý đồng thời Nhiều tiến trình/luồng điều khiển việc xuất nhập xử lý liệu Các tiến trình/luồng thực đồng thời Khó thực Network programming Máy chủ xử lý Tại thời điểm, xử lý yêu cầu Đưa yêu cầu vào hàng đợi Yêu cầu máy khách xử lý yêu cầu trước xử lý xong Dễ thực thi hiệu Server Nhất trường hợp yêu cầu xử lý phải chờ yêu cầu xử lý nhiều kết thúc Receiving requests from Client Receiving requests from Client Client1 Client2 Network programming Cách thực máy chủ xử lý Một máy chủ xử lý thực theo bước đơn giản sau Tạo socket gán thông tin cổng cho socket Lặp lại Chấp nhận yêu cầu từ máy khách Xử lý yêu cầu Tạo thông báo kết gửi trả lại máy khách Trong trường hợp máy chủ xử lý hướng kết nối Tại thời điểm, máy chủ xử lý yêu cầu đến từ kết nối tới máy khách Network programming TCP server socket() TCP client bind() socket() listen() connect() write() Connection request accept() data (request) read() Send next request Process request read() close() data (reply) EOF Wait next request write() read() close() Network programming 10 Asynchronous I/O Model kernel application aio_read system call no datagram ready return wait for data process continues executing datagram ready copy datagram signal handler process datagram copy data from kernel to user deliver signal copy complete specified in aio_read Network programming 43 Hàm gọi select Hàm Select cung cấp xuất nhật liệu không đồng cách cho phép tiến trình đợi trạng thái sẵn sàng nhiều sockets tập mô tả file định sẵn Khơng có socket Có thể thiết lập thời gian timeout tối đa Ví dụ, hàm select trả giá trị khi: Một mô tả file tập {1,4,5} sẵn sàng để đọc Một mô tả file tập {2,7} sẵn sàng để ghi Một mô tả file tập {1,4,5} nhận ngoại lệ Sau hết 20 giây Network programming 44 Select(): dùng cho xuất nhập không đồng #include #include int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout); Returns: positive count of ready descriptors, on timeout, –1 on error Các tham số maxfdp1: số lượng tối đa mô tả file mà hệ thống phải kiểm tra trạng thái readset, writeset, exceptset: tập mô tả file mà hệ thống kiểm tra trạng thái sẵn sàng đọc, viết, có ngoại lệ timeout: thời gian timeout đợi mô tả file trở nên sẵn sàng Kiểu liệu fd_set data : Biểu diễn tập miêu tả file dạng chuỗi integer, bit chuỗi ứng với miêu tả file Network programming 45 Khi socket trạng thái sẵn sàng đọc Khi số byte liệu buffer socket lớn kích thước tối thiểu (mặc định 1) Khi nửa đọc kết nối bị đóng Chúng ta thiết lập giá trị kích thước tối thiểu tùy chọn SO_RCVLOWAT Kết nối TCP nhận gói tin FIN Một thao tác đọc socket trả giá trị (i.e EOF) Nếu socket socket lắng nghe số lượng kết nối hoàn thành bắt tay ba bước hàng đợi lớn Một lỗi socket chờ Một thao tác đọc socket trả giá trị -1 với tập errno gán giá trị tùy thuộc vào lỗi xảy Network programming 46 Khi socket trạng thái sẵn sàng ghi? Khi số byte trống buffer gửi socket lớn độ lớn tối thiểu (mặc định 2048) : Một nửa đọc kết nối bị đóng socket kết nối socket không cần kết nối(e.g., UDP) Một thao tác viết socket sinh tín hiệu SIGPIPE Một socket sử dụng kết nối non-blocking vừa hoàn thành bắt tay bước hay kết nối bị thất bại Một lỗi socket chờ Một thao tác viết socket trả giá trị -1 với tập errno set gán giá trị lỗi Network programming 47 Macros /* Xóa tất bits fdset */ void FD_ZERO(fd_set *fdset); /* Bật bit ứng với fd fdset */ void FD_SET(inf fd, fd_set *fdset); /* Tắt bit ứng với fd fdset */ void FD_CLR(inf fd, fd_set *fdset); /* Kiểm tra xem bit ứng với fd fdset có bật lên hay khơng*/ Int FD_ISSET(inf fd, fd_set *fdset); Network programming 48 Cách thực thi máy chủ Tạo socket lắng nghe cổng dịch vụ Gán socket vào tập mô tả file xuất nhập liệu Sử dụng lệnh gọi select để chờ xuất nhập liệu tập mô tả file sockets Nếu socket lắng nghe sẵn sàng, gọi hàm accept để chấp nhận kết nối nhận socket kết nối Gán socket kết nối vào tập mô tả file xuất nhập liệu Network programming 49 Cách thực thi máy chủ (2) Nếu có socket kết nối sẵn sàng, gọi hàm đọc để đọc yêu cầu từ máy khách, xử lý yêu cầu tạo thông báo trả lới Gọi hàm ghi để gửi thông báo trả lời cho máy khách Tiếp tục xử lý với bước Network programming 50 Ví dụ - Máy chủ ECHO đơn tiến trình /* TCPmechod.c - main, TCPechod */ /* include header files here */ #define QLEN /*max connection queue length */ #define BUFSIZE 4096 extern int errno; int echo (int fd) /*echo data until end of file */ int errexit (const char *format, …); int passiveTCP (const char *service, int qlen); Network programming 51 /* main- concurrent TCP server for ECHO service */ int main(int argc, *argv[]) { char *service = “echo”; /*service name or port number */ struct sockaddr_in fsin; /* the from address of a client */ int alen; /* length of a client’s address */ int msock; /* master server socket */ /* read file descriptor set */ fd_set rfds; /* active file descriptor set */ fd_set afsd; int fd; /* check arguments - not detailed here*/ Network programming 52 msock = passiveTCP (service, QLEN); FD_ZERO (&afds); FD_SET (msock, &afds); while(1) { memcpy(&rfds, &afds, sizeof(rfds)); if ( select (FD_SETSIZE, &rfds, (fd_set *) 0, (fd_set *) 0, (struct timeval *) 0) < 0) errexit (“select: %s\n”, strerror(errno)); Network programming 53 if ( FD_ISSET (msock, &rfds)) { int ssock; alen = sizeof (fsin); ssock = accept(msock,(struct sockaddr *)&fsin, &alen); if ( ssock < 0) errexit (“accept: %s\n, strerror (errno)); FD_SET (ssock, &afds); } Network programming 54 for ( fd = 0; fd < FD_SETSIZE; ++fd) if (fd!=msock && FD_ISSET(fd, &rfds)) if (echo(fd) ==0 ) { (void) close (fd); FD_CLR (fd, &afds); } } } Network programming 55 /* Echo - echo one buffer of data, returning byte count */ int echo (int fd) { char buf[BUFSIZE]; int cc; cc = read (fd, buf, sizeof(buf)); if ( cc < ) errexit(“echo read: %s\n”, strerror(errno)); if (cc && write(fd, buf, cc) < ) errexit (“echo write: %s\n”, strerror(errno)); return cc; } Network programming 56 Vấn đề xử lý đồng thời, đơn tiến trình Xử lý đồng thời nhiều kết nối … xử lý yêu cầu => Denial Of Service Network programming 57 ... loại máy chủ Máy chủ xứ lý đồng thời, đa tiến trình, hướng kết nối Ví dụ Máy chủ xử lý đồng thời, đa tiến trình, hướng kết nối Máy chủ xử lý đồng thời, đơn tiến trình, hướng kết nối Ví dụ Máy chủ. .. programming Máy chủ không kết nối Máy chủ sử dụng giao thức UDP Ưu điểm Khơng có kết nối máy khách máy chủ Chỉ cần socket Thích hợp với kiểu truyền tin quảng bá/quảng phát Người lập trình. .. xử lý yêu cầu máy khách khác lớn Máy chủ chạy máy tính có nhiều vi xử lý Network programming 13 Máy chủ xử lý đồng thời, không kết nối, đa tiến trình Network programming 14 Máy chủ xử lý đồng