Linux操作系统网络服务器模型分享

所谓并发服务器就是在同一个时刻可以处理来自多个客户端的请求;循环服务器是指服务器在同一时刻只可以响应一个客户端的请求。而且对于TCP和UDP套接字,这两种服务器的实现方式也有不同的特点。
1、TCP循环服务器:
首先TCP服务器接受一个客户端的连接请求,处理连接请求,在完成这个客户端的所有请求后断开连接,然后再接受下一个客户端的请求。创建TCP循环服务器的算法如下:

复制代码

代码如下:

socket(……); //创建一个TCP套接字
bind(……); //邦定公认的端口号
listen(……); //倾听客户端连接
while(1) //开始循环接收客户端连接
{
accept(……);//接收当前客户端的连接
while(1)
{ //处理当前客户端的请求
read(……);
process(……);
write(……);
}
close(……); //关闭当前客户端的连接,准备接收下一个客户端连接
}

TCP循环服务器一次只处理一个客户端的请求,如果有一个客户端占用服务器不放时,其它的客户机连接请求都得不到及时的响应。因此,TCP服务器一般很少用循环服务器模型的。
2、TCP并发服务器:
并发服务器的思想是每一个客户端的请求并不由服务器的主进程直接处理,而是服务器主进程创建一个子进程来处理。创建TCP并发服务器的算法如下:

复制代码

代码如下:

socket(……); //创建一个TCP套接字
bind(……); //邦定公认的端口号
listen(……);//倾听客户端连接
while(1) //开始循环接收客户端的接收
{
accept(……);//接收一个客户端的连接
if(fork(……)==0) //创建子进程
{
while(1)
{ //子进程处理某个客户端的连接
read(……);
process(……);
write(……);
}
close(……); //关闭子进程处理的客户端连接
exit(……) ;//终止该子进程
}
close(……); //父进程关闭连接套接字描述符,准备接收下一个客户端连接
}

TCP并发服务器可以解决TCP循环服务器客户端独占服务器的情况。但同时也带来了一个不小的问题,即响应客户机的请求,服务器要创建子进程来处理,而创建子进程是一种非常消耗资源的操作。
3、UDP循环服务器:
UDP服务器每次从套接字上读取一个客户端的数据报请求,处理接收到的UDP数据报,然后将结果返回给客户机。创建UDP循环服务器的算法如下:
1 socket(……); //创建一个数据报类型的套接字 2 bind(……); //邦定公认的短口号 3 while(1) //开始接收客户端的连接 4 { //接收和处理客户端的UDP数据报 5 recvfrom(……); 6 process(……); 7 sendto(……);//准备接收下一个客户机的数据报 8 }
消除行号
因为UDP是非面向连接的,没有一个客户端可以独占服务器。只要处理过程不是死循环,服务器对于每一个客户机的请求总是能够处理的。
UDP循环服务器在数据报流量过大时由于处理任务繁重可能造成客户技数据报丢失,但是因为UDP协议本身不保证数据报可靠到达,所以UDP协议是允许丢失数据报的。
鉴于以上两点,一般的UDP服务器采用循环方式4、UDP并发服务器把并发的概念应用UDP就得到了并发UDP服务器,和并发TCP服务器模型一样是创建子进程来处理的。
创建UDP并发服务器的算法如下:

复制代码

代码如下:

socket(……); //创建一个数据报类型的套接字
bind(……); //邦定公认的短口号
while(1) //开始接收客户端的连接
{ //接收和处理客户端的UDP数据报
recvfrom(……);
if(fork(……)==0) //创建子进程
{
rocess(……);
sendto(……);
}
}

除非服务器在处理客户端的请求所用的时间比较长以外,人们实际上很少用这种UDP并发服务器模型的。
4、多路复用I/O并发服务器:
创建子进程会带来系统资源的大量消耗,为了解决这个问题,采用多路复用I/O模型的并发服务器。采用select函数创建多路复用I/O模型的并发服务器的算法如下:
初始化(socket,bind,listen);

复制代码

代码如下:

while(1)
{
设置监听读写文件描述符(FD_*);
调用select;
如果是倾听套接字就绪,说明一个新的连接请求建立
{
建立连接(accept);
加入到监听文件描述符中去;
}
否则说明是一个已经连接过的描述符
{
进行操作(read或者write);
}

多路复用I/O可以解决资源限制问题,此模型实际上是将UDP循环模型用在了TCP上面。这也会带了一些问题,如由于服务器依次处理客户的请求,所以可能导致友的客户会等待很久。

(0)

相关推荐

  • Linux操作系统网络服务器模型

    所谓并发服务器就是在同一个时刻可以处理来自多个客户端的请求;循环服务器是指服务器在同一时刻只可以响应一个客户端的请求.而且对于TCP和UDP套接字,这两种服务器的实现方式也有不同的特点. 1.TCP循 ...

  • Linux操作系统之rpm五种基本操作分享

    Linux操作系统现在已经成为流行的操作系统,很多的人都开始学习,Linux操作系统包括了很多的专业知识,今天和大家讲讲Linux操作系统中的rpm基本操作。希望你学会本文中提到rpm的五种基本操作知 ...

  • 如何在Linux操作系统定时重启Tomcat服务?

    Linux操作系统定时重启Tomcat服务的方法如下: 1、编写tomcat_shutdown.sh: #!/bin/sh export JAVA_HOME=/home/oracle/jdk1.7.0 ...

  • Linux操作系统学习方法小结

    如果你正在学习Linux操作系统,不知从哪里入手,可以参考下面给出的9点建议,还有一点是本人附加的,Linux程序工程师非常吃香,以后肯定是个火红职业。不管怎样,只要努力的学,后果很美好。 1.掌握至 ...

  • Linux操作系统加载不同文件系统的总结

    学习操作系统时我们都了解到文件系统是操作系统的重要组成部分之一。文件系统有很多种类型,比windows的fat、fat32;Linux的ext、ext2或ext3;FreeBSD的ufs等等。在使用L ...

  • Linux操作系统下修改IP.DNS和路由配置

    在Linux操作系统下修改IP、DNS和路由配置ifconfig eth0 新ip然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip一、修改IP地址[ ...

  • Linux操作系统中超级权限控制的应用

    在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者。普通用户无法执行的操作,root用户都能完成,所以也被称之为超级管理用户。 在系统中,每个文件、目录和进程,都归属于某一个用户 ...

  • Linux操作系统怎么建立无线网连接

    Linux操作系统建立无线网连接的步骤如下: 1.打开网络配置工具(系统-管理-网络). 2.选中设备面板,点击新建. 3.在弹出的新窗口中选择无线连接,点击前进. 4.新出现在无线网卡列表中选择你的 ...

  • linux操作系统教程:[7]linux怎么移动文件

    现在是网络时代,在互联网的快速发展下,linux操作系统正在得到越来越广泛应用,特别是在企业应用最多,由linux操作系统稳定强,在服务器上不逊于其它操作系统,linux就是命令多一点.那我们怎么来学 ...