1 / 8
文档名称:

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

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

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

分享

预览

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

上传人:beny00001 2020/7/12 文件大小:39 KB

下载得到文件列表

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

文档介绍

文档介绍:,我们介绍了循环服务器,,即处理的请串行的。而并发服务器可以通过创建多个进程或者是线程来并发的处理多个请求。但由于进程或线程的切换会带来一定的开销。而且随着客户端请求的增多,创建的线程或进程的数目也越来越多,开销势必会增加。因此,本文提出了I/O复用的循环服务器。I/O复用的循环服务器创建两个线程,一个是客户端连接处理线程,专门用来处理客户端的连接,当有客户端到来的时候,此线程把客户端的套接字描述符放到一块公共的区域中。另一个是业务处理线程,此线程轮循(select)客户端套接字描述符集合中有没有数据到来,如果有数据到来,那么就进行处理。(...);bind(...);listen(...);pthread_create(...);pthread_join(..);close(...);//关闭服务器套接字连接处理线程:while(1){ accept(...); store(...);//存储客户端套接字描述符}业务处理线程:while(1){ get(...);//取出套接字描述符放到FD_SET select(...); recv(....); process(...); send(...); close(....);}从算法的主要流程可以看出,I/O复用循环服务器只用两个线程,一个是请求业务连接线程,专门处理连接。另一个是业务处理线程,轮循客户端的套接字有没有数据。;#include<>#include<>#include<>#include<sys/>#include<sys/>#inet/>#include<>#include<>/**I/O复用循环服务器I/O并发服务器随着客户端的增多,必须增加处理单元,系统的负载会移动多个处理单元的切换上,切换进程或者是线程而I/O复用服务器包括两个线程,一个是业务连接线程,专门处理客户端的连接,另一个是业务请求处理线程,对多个客户端描述符进行一定时间的等待,即select监听多个描述符**/#definePORT8888#defineCLIENTNUM1024#defineBUFFERSIZE1024#defineBACKLOG10staticintconnect_host[CLIENTNUM];staticintconnect_number=0;//连接的客户数staticvoid*handle_connect(void*argv){//业务连接函数,处理客户端的连接,将客户端的套接字描述符加入到连接池中  intret;  ints; intsc;  s=*((int*)argv);//服务端套接字描述符  inti=0;  structsockaddr_inclient_addr; intlen; len=sizeof(structsockaddr_in);  for(;;){//监听有没有客户端到来    sc=accept(s,(structsockaddr*)&client_addr,&len);    printf("aclientconnect,f