Linux--网络编程-常见服务器模型
2017-04-19 00:13
288 查看
1、UDP循环服务器
UDP循环服务器的实现非常简单,UDP服务器每次从套接字上读取一个客户端的请求进行处理,然后将结果返回客户端,可以用下面的算法来实现。soket(...); bind(...); while(1) { recvfrom(...); process(...); sendto(...); }
因为UDP是非面向连接的,因此没有一个客户端可以一直占用服务端,只要处理过程不是死循环,服务器对于每一个客户端的请求总是能够满足的。
2、TCP循环服务器
TCP循环服务器实现也不难,TCP服务器接收一个客户端的连接,然后处理,完成了这个客户端的所有请求后断开连接,其算法如下。socket(...); bind(...); listen(...); while(1) { accept(...); while(1) { read(...); process(...); write(...); } close(...); }
TCP循环服务器一次只能处理一个客户端的请求,只有在这个客户端的所有请求都满足后,服务器才可以继续后面的请求,这样如果有一个客户端占用服务器不放,则其他的客户端就都不能工作了,因此TCP服务器一般很少用循环服务器模型。
3、TCP并发服务器
TCP并发服务器的思想是每一个客户端的请求并不由服务器直接处理,而是由服务器创建一个子进程来处理,其基本模型如下。socket(...); bind(...); listen(...); while(1) { accpet(...); if(fork(...) == 0) { process(...); close(...); exit(...); } close(...); }
TCP并发服务器可以解决TCP循环服务器客户端独占服务器的情况,不过同时也带来了一个不小的问题,为了响应客户端的请求,服务器要创建子进程来处理,而创建子进程是非常消耗资源的操作。
4、UDP并发服务器
将并发的概念用于UDP就得到了并发UDP服务器模型,与并发TCP服务器模型一样,并发UDP服务器模型将创建一个子进程来处理客户端的请求,算法和并发的TCP模型一样,其基本的模型如下。socket(...); bind(...); while(1) { recvfrom(...); if(fork(...) == 0) { process(...); sendto(...); } }
除非服务器在处理客户端的请求所用的时间比较长,否则人们实际上很少用这种模型。
5、多路复用I/O并发服务器
为了解决创建子进程带来的系统资源消耗,人们又想出了多路复用I/O模型。首先介绍一个select函数,该函数及其有关宏的定义如下:
int select(int nfds,fd_set *readfds,fd_set *writefds,fd_set *exceptfds,struct timeval *timeout) void FD_SET(int fd, fd_set *fdset) void FD_CLR(int fd,fd_set *fdset) void FD_ZERO(fd_set *fdset) int FD_ISSET(int fd, fd_set *fdset)
一般来说当读/写网络套接字时,进程有可能在读/写时阻塞,直到一定的条件满足。比如从一个套接字读数据时,可能缓冲区里面没有数据可读(通信的对方还没有发送数据过来),这时的读调用就会等待(阻塞)直到有数据可读。如果不希望阻塞,可以使用select系统调用,只要设置好select的各个参数,则当下网络套接字可以读/写时select将“通知”我们可以读/写了。select函数的参数说明如下。
相关文章推荐
- Linux网络编程常见服务器模型
- Linux网络编程之多进程模型编程与一个使用进程池实现的CGI服务器
- linux网络编程:并发服务器的模型
- 【Linux网络编程】并发服务器的三种实现模型
- Linux网络编程学习笔记(5)---实现点对点通信(回射客服端/服务器模型)
- Linux 网络编程——并发服务器的三种实现模型
- Linux网络编程[UDP客户端服务器的编程模型]
- Linux 网络编程——并发服务器的三种实现模型
- 【Linux网络编程】基于TCP协议 I/O多路转接(select) 的高性能回显服务器客户端模型
- Linux 网络编程——并发服务器的三种实现模型
- Linux网络编程并发服务器模型
- linux网络编程:并发服务器的模型
- Linux 网络编程——并发服务器的三种实现模型
- 【网络编程笔记】Linux系统常见的网络编程I/O模型简述
- Linux网络编程:9. 服务器模型
- Linux网络编程--9. 服务器模型
- Linux网络编程服务器模型选择之IO复用循环并发服务器
- (九)Linux网络编程--9. 服务器模型
- Linux网络编程服务器模型选择之并发服务器(下)
- Linux网络编程服务器模型选择之循环服务器