服务器模型
在网络通讯中,服务器端通常需要处理多个客户端。由于多个客户端的请求可能会同时到来,服务器端可采用不同的方法来处理。一般服务器端可采用两种模型来实现:循环服务器模型和并发服务器模型
- 循环服务器模型:服务器端依次处理每个客户端,直到当前客户端的所有请求处理完毕,再处理下一个客户端。这类模型的优点是简单,缺点是容易造成其他客户端等待时间过长
- 并发服务器模型:在服务器端采用多任务机制(多进程或多线程),分别为每个客户端创建一个任务来处理,极大地提高了服务器的并发处理能力
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(...);
}
关注我的公众号,共同交流学习嵌入式开发相关技术: