Linux网络编程(3):并发服务器程序设计

本文探讨了Linux网络编程中的服务器模型,包括循环服务器和并发服务器。介绍了UDP循环服务器和TCP循环服务器的工作原理,指出TCP循环服务器由于一次只能处理一个请求而不适合高并发场景。接着讨论了TCP并发服务器,通过fork创建子进程或使用多线程来处理客户端请求,实现同时处理多个连接。最后提到了select函数在多路复用I/O中的作用。
摘要由CSDN通过智能技术生成

在介绍并发服务器程序设计的过程中,先介绍下服务器模型。在网络编程中来说都是许多客户端对应一个服务端,为了处理客户需求,对服务端的程序就提出了特殊的要求,日常常用的服务器模型有:

1)循环服务器:服务器在同一时刻只能响应一个客户端要求

2)并发服务器:服务器在同一时刻可以响应多个客户端的请求


UDP循环服务器实现方法:

UDP服务器每次从套接字上读一个客户端的请求->处理->然后将结果返回给客户端

由于UDP是无向连接,客户端不需要发送连接请求,因此可以同时响应多个客户端,它是在一个进程中实现的。


TCP循环服务器实现方法:

TCP循环服务器接收一个客户端的连接,然后处理、完成了这个客户端的所有请求后,断开连接。

TCP循环服务器一次只能处理一个客户端请求。只有在这个客户端的所有请求都满足后,服务器才可以继续后面的请求。此时,如果一个客户端占主服务端不放时,其他客户端都不能工作。因此,TCP服务器一般很少用循环服务器。


TCP并发服务器

并发服务器思想:每个客户机的请求并不由服务器直接处理,而是由服务器创建一个子进程来处理。

socket(.....)
bind(.....)
listen(.....)
while(1){
accept();
if(fork(...)==0)
process(....)
close(....)
exit(1);
}
else 
close();
}

1:关于创建子进程的fork系统调用而言,我们了解了关于fork创建子进程的问题。

那可能会有这样的疑问,对于fork而言,子进程拷贝了fork以下的代码段、数据段等。从事着与父进程一样的工作,那么如何实现了子进程去处理,而父进程继续去监听端口呢?
其实这里面巧妙的运用了fork创建子进程以后,根据父子进程返回值的不同做了判断的处理。

在运用fork创建子进程时,父进程的返回值是子进程的PID,而子进程的返回值是0。

2:同样可以使用多线程来处理。

在创建进程进行处理时,除此之外也可以使用多线程进行处理。

运用pthread_create

因此可以做如此判断:

if((pthread_create(&tid,NULL,thr_fn,&com_fd))==-1);

线程创建成功返回0。


另外一种很重要的并发服务器模型是select函数。通过select函数,用多路复用I/O实现在单进程(线程)中处理多个客户的连接。关于select函数的具体运用,在另外的章节会详细介绍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值