Linux网络编程服务器模型选择之循环服务器
2014-03-22 14:56
246 查看
在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式。本节开始介绍Linux下套接字编程的服务器模型选择,主要包括循环服务器模型、并发服务器模型、IO复用服务器模型等,这也是我们常见的几种网络服务器模型。其中基本可以分为两大类,
1. 循环服务器:循环服务器在同一时刻只能响应一个客户端的请求,是比较简单的一种模型;
2. 并发服务器:并发服务器在同一时刻可以响应多个客户端的请求,这里面又有很多分类,接下来会逐步介绍;
从上面的的流程可以看出,TCP循环服务器比UDP循环服务器多了一个accept的过程,这也是TCP和UDP套接字编程的主要区别。TCP服务器在accept出等待客户端的到来,因为accept函数是阻塞的,因此TCP服务器会在此等待(对accept函数的不同处理是区分各类服务器的一个重要参考依据)。相应地,UDP会在recvfrom阻塞,并等待客户端的连接。
View Code
两者返回给客户端的的输出都是一样的,比如:TIME:Sat Mar 22 15:26:25 2014
循环服务器的介绍就到这里。接下来介绍并发服务器模型。
1. 循环服务器:循环服务器在同一时刻只能响应一个客户端的请求,是比较简单的一种模型;
2. 并发服务器:并发服务器在同一时刻可以响应多个客户端的请求,这里面又有很多分类,接下来会逐步介绍;
循环服务器模型
循环服务器是指对于客户端的请求和连接,服务器逐个进行处理,处理完一个连接后再处理下一个连接,属于串行处理方式,结构比较简单。该模型的算法过程如下:/* UDP循环服务器模型 */ socket(); bind(); while(true) {
recvfrom(); process(); sendto(); } close();
/* TCP循环服务器模型 */ socket(); bind(); listen(); while(true) { accept(); while(true) { recv(); process(); send(); } close(); }
从上面的的流程可以看出,TCP循环服务器比UDP循环服务器多了一个accept的过程,这也是TCP和UDP套接字编程的主要区别。TCP服务器在accept出等待客户端的到来,因为accept函数是阻塞的,因此TCP服务器会在此等待(对accept函数的不同处理是区分各类服务器的一个重要参考依据)。相应地,UDP会在recvfrom阻塞,并等待客户端的连接。
一个循环服务器的例子
下面给出一个简单的循环服务器样子,模拟服务器对外提供时间服务器,等待客户端到来,并返回给客户端服务器的当前时间。UDP循环服务器
/**TCP循环服务器--client端程序**/ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <string.h> #include <stdio.h> #define BUFFLEN 1024 #define SERVER_PORT 12346 int main(int argc, char *argv[]) { int s; /*服务器套接字文件描述符*/ struct sockaddr_in server; /*本地地址*/ char buff[BUFFLEN]; int n = 0; /*建立TCP套接字*/ s = socket(AF_INET, SOCK_STREAM, 0); /*初始化地址*/ memset(&server, 0, sizeof(server)); server.sin_family = AF_INET;/*AF_INET协议族*/ server.sin_addr.s_addr = htonl(INADDR_ANY);/*任意本地地址*/ server.sin_port = htons(SERVER_PORT);/*服务器端口*/ /*连接服务器*/ int err = connect(s, (struct sockaddr*)&server,sizeof(server)); memset(buff, 0, BUFFLEN); strcpy(buff, "TIME"); /*发送数据*/ send(s, buff, strlen(buff), 0); memset(buff, 0, BUFFLEN); /*接收数据*/ n = recv(s, buff, BUFFLEN, 0); if(n >0){ printf("TIME:%s",buff); } close(s); return 0; }
View Code
两者返回给客户端的的输出都是一样的,比如:TIME:Sat Mar 22 15:26:25 2014
循环服务器的介绍就到这里。接下来介绍并发服务器模型。
相关文章推荐
- Linux网络编程服务器模型选择之IO复用循环并发服务器
- Linux网络编程服务器模型选择之并发服务器(下)
- Linux网络编程服务器模型选择之并发服务器(上)
- Linux网络编程服务器模型选择之循环服务器
- Linux网络编程服务器模型选择之IO复用循环并发服务器
- Linux网络编程服务器模型选择之并发服务器(上)
- unix网络编程--服务器模型选择
- Linux网络编程【七】:TCP协议高性能服务器(http)模型之I/O多路转接poll
- 多路复用 循环服务器模型
- 服务器编程模型 循环服务器->IO复用循环服务器 并发服务器->高性能并发服务器
- linux网络编程:并发服务器的模型
- 并发服务器模型:IO复用循环服务器
- socket网络编程 服务器模型选择
- 循环服务器,并发服务器模型以及I/O多路转接模型
- Linux网络编程--(5)Linux常见服务器模型
- Linux网络编程一步一步学-循环读取服务器上的数据
- Linux网络编程-- 服务器模型
- 图像检索服务器编写问题记录——服务器端模型选择+epoll和非阻塞IO
- Linux网络编程--9. 服务器模型 非常好 (http://www.fanqiang.com)
- Linux网络编程--9. 服务器模型