1. Trang chủ
  2. » Công Nghệ Thông Tin

Bai 8 lap trinh may chu

57 370 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 57
Dung lượng 465,5 KB

Nội dung

Lập trình máy chủ Giáo viên: Nguyễn Hoà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 nguyên tính toá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  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 Ưu điểm  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 data (request) Send next request accept() read() 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 process continues executing wait for data datagram ready copy datagram signal handler process datagram copy data from kernel to user deliver signal specified in aio_read copy complete 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)  Chúng ta thiết lập giá trị kích thước tối thiểu tùy chọn SO_RCVLOWAT Khi nửa đọc kết nối bị đóng  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 */ fd_set rfds; /* read file descriptor set */ fd_set afsd; /* active file descriptor set */ 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 [...]... để chấp nhận một kết nối khác Network programming 18 master slave1 Socket for connection requests slave2 slaven socket for individual connections Network programming Server application processes Operating system 19 Cách thực thi máy chủ xử lý đồng thời, hướng kết nối, đa tiến trình   Bước 1 tiến trình mẹ: Khởi tạo socket, gán thông tin cho socket và chuyển socket sang trạng thái thụ động, chờ kết nối... trình mẹ cần gọi hàm sig_chld mỗi khi nó nhận được tín hiệu SIGCHLD báo hiệu một tiến trình con đã kết thúc Hàm sig_chld gọi hàm wait3 để hoàn thành việc kết thúc của tiến trình con Network programming 28 /* sig_chld - clean up zombie child */ void sig_chld(int signo){ int status; while (wait3(&status, WNOHANG, (struct rusage *) 0) >= 0) /* empty */; }  Giá trị status sau khi hàm wait3 trả về sẽ cho ... thúc Hàm sig_chld gọi hàm wait3 để hoàn thành việc kết thúc tiến trình Network programming 28 /* sig_chld - clean up zombie child */ void sig_chld(int signo){ int status; while (wait3(&status, WNOHANG,... programming 29 Cách viết khác hàm sig_chld /* reaper - clean up zombie child */ void sig_chld (int sig) { pid_tpid; int status while ((pid = waitpid (-1 , &status, WNOHANG) )> 0) /* empty */; return;... tiến trình #include pid_t fork(void); Returns: in child, process ID of child in parent, -1 on error   Khởi tạo tiến trình khác tiến trình mẹ PID PPID Gọi lần trả lần    Trả tiến trình

Ngày đăng: 22/12/2016, 13:11

TỪ KHÓA LIÊN QUAN

w