Linux网络编程|服务器模型

服务器模型

在网络通讯中,服务器端通常需要处理多个客户端。由于多个客户端的请求可能会同时到来,服务器端可采用不同的方法来处理。一般服务器端可采用两种模型来实现:循环服务器模型和并发服务器模型

  • 循环服务器模型:服务器端依次处理每个客户端,直到当前客户端的所有请求处理完毕,再处理下一个客户端。这类模型的优点是简单,缺点是容易造成其他客户端等待时间过长
  • 并发服务器模型:在服务器端采用多任务机制(多进程或多线程),分别为每个客户端创建一个任务来处理,极大地提高了服务器的并发处理能力

1. TCP循环服务器模型

TCP循环服务器模型工作流程如下

socket(...);
bind(...);
listen(...);
while(1){
    
    
   accept(...);
   process(...);
   close(...);
}

服务器端采用循环嵌套来实现。外层循环依次提取每个客户端的连接请求,建立TCP连接。内层循环接收并处理当前客户端的所有数据,直到客户端关闭连接;如果当前客户端没有处理结束,其他客户端必须一直等待

2. TCP并发服务器模型

TCP并发服务器模型工作流程如下

/*****TCP多进程并发服务器模型*****/
socket(...);
bind(...);
listen(...);
while(1){
    
    
   accpet(...);
   if(fork(...) == 0)
   {
    
    
   	 process(...);
     close(...);
     exit(...);
   }
   close(...);
}
/*****TCP多线程并发服务器模型*****/
socket(...);
bind(...);
listen(...);
while(1){
    
    
   accpet(...);
   if((pthread_create(...))!==-1)
   {
    
    
     process(...);
     close(...);
     exit(...);
   }
   close(...);
}

服务器端父进程一旦接收到客户端的连接请求,便建立好连接并创建新的子进程。意味着每个客户端在服务器端有一个专门的子进程为其服务;服务器端的多个子进程同时运行(宏观上),处理多个客户端;服务器端的父进程不具体处理每个客户端的数据请求

3. UDP循环服务器模型

UDP循环服务器模型工作流程如下

socket(...);
bind(...);
while(1)
{
    
    
   recvfrom(...);
   process(...);
   sendto(...);
}

猜你喜欢

转载自blog.csdn.net/Chuangke_Andy/article/details/108428059