1 / 6
文档名称:

Linux网络编程之IO复用循环服务器.doc

格式:doc   大小:21KB   页数:6页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Linux网络编程之IO复用循环服务器.doc

上传人:h377683120 2020/8/3 文件大小:21 KB

下载得到文件列表

Linux网络编程之IO复用循环服务器.doc

文档介绍

文档介绍:1、介绍在前几节,我们介绍了循环服务器,并发服务器、简单得循环服务器每次只能处理一个请求,。但由于进程或线程得切换会带来一定得开销。而且随着客户端请求得增多,创建得线程或进程得数目也越来越多,开销势必会增加。因此,本文提出了I/O复用得循环服务器。I/O复用得循环服务器创建两个线程,一个就是客户端连接处理线程,专门用来处理客户端得连接,当有客户端到来得时候,此线程把客户端得套接字描述符放到一块公共得区域中。另一个就是业务处理线程,此线程轮循(select)客户端套接字描述符集合中有没有数据到来,如果有数据到来,、 I/O复用循环服务器处理流程socket(、、、);bind(、、、);listen(、、、);pthread_create(、、、);pthread_join(、、);close(、、、);//关闭服务器套接字连接处理线程:while(1){ accept(、、、);  store(、、、);//存储客户端套接字描述符}业务处理线程:while(1){ get(、、、);//取出套接字描述符放到FD_SET select(、、、); recv(、、、、); process(、、、); send(、、、); close(、、、、);}从算法得主要流程可以瞧出,I/O复用循环服务器只用两个线程,一个就是请求业务连接线程,专门处理连接。另一个就是业务处理线程,轮循客户端得套接字有没有数据。3、相关例子服务器;#include〈stdio、h>ﻫ#include 〈string、h〉#include 〈stdlib、h>ﻫ#include <sys/socket、h>ﻫ#include<sys/types、h>#include </in、h〉#include<time、h>#include 〈pthread、h>/**ﻫI/O复用循环服务器I/O并发服务器随着客户端得增多,必须增加处理单元,系统得负载会移动多个处理单元得切换上,切换进程或者就是线程而I/O复用服务器包括两个线程,一个就是业务连接线程,专门处理客户端得连接,另一个就是业务请求处理线程,对多个客户端描述符进行一定时间得等待,即select监听多个描述符ﻫ**/#define PORT8888#defineCLIENTNUM 1024ﻫ#define BUFFERSIZE1024#defineBACKLOG 10staticintconnect_host[CLIENTNUM];ﻫstaticint connect_number=0;//连接得客户数ﻫstaticvoid*handle_connect(void*argv){//业务连接函数,处理客户端得连接,将客户端得套接字描述符加入到连接池中ﻫ  intret;  ints;ﻫ intsc;ﻫ  s=*((int*)argv);//服务端套接字描述符   inti=0;ﻫ  struct sockaddr_in client_addr; intlen;ﻫ len=sizeof(structsockaddr_in);ﻫ   for(;;){//监听有没有客户端到来ﻫ     sc=accept(s,(struct sockaddr*