TCP、UDP服务器模型
在网络程序里面,通常都是一个服务器处理多个客户机,为了出个多个客户机的请求,服务器端的程序有不同的处理方式。
目前最常用的服务器模型:
循环服务器:循环服务器在同一时刻只能响应一个客户端的请求。
并发服务器:并发服务器在同一时刻可以响应多个客户端的请求。
循环服务器模型:
TCP
socket(…);
bind(…);
listen();
while(1)
{
accept();
while(1)
{
recv();
process();
send();
}
close();
}
UDP
socket();
bind();
while(1)
{
recvfrom();
process();
sendto();
}
并发服务器:
为了弥补TCP循环服务器的缺陷,人马涉及了并发服务器模型。
并发服务器的设计思想是服务器接受客户端的连接请求后创建子进程来为客户端服务。
TCP并发服务器可以避免TCP循环服务器中客户端独占服务器的情况。
流程如下:
socket();
bind();
listen();
while(1)
{
accept(); //不断的接受等待
if(fork()==0) //创建子进程
{
while(1){recv();process();send();}
close(); //关闭处理完的socket
exit();
}
close(..); //关闭父进程
}
如果客户端多的话就要创建多个子进程,但是过多的子进程会影响服务器端的运行效率。
UDP
和tcp一样。
IO多路复用并发服务器
初始化(socket->bind->listen);
While(1){
设置监听读写文件描述符集合 (FD_*);
调用select;
如果是监听套接字就绪,说明有新的连接请求{
建立连接(accept);
加入到监听文件描述符集合;
}
否则说明是一个已经连接过的描述符{
进程操作(send或者recv)
}
}
IO多路复用模型可以解决资源限制的问题,此模型实际上是将UDP循环模型用在了
TCP上。
服务器使用单进程循环处理请求。