<code id='bt4i7'><strong id='bt4i7'></strong></code>

  • <fieldset id='bt4i7'></fieldset>
    <i id='bt4i7'></i>

      <i id='bt4i7'><div id='bt4i7'><ins id='bt4i7'></ins></div></i>
      <span id='bt4i7'></span>
      <ins id='bt4i7'></ins>

    1. <tr id='bt4i7'><strong id='bt4i7'></strong><small id='bt4i7'></small><button id='bt4i7'></button><li id='bt4i7'><noscript id='bt4i7'><big id='bt4i7'></big><dt id='bt4i7'></dt></noscript></li></tr><ol id='bt4i7'><table id='bt4i7'><blockquote id='bt4i7'><tbody id='bt4i7'></tbody></blockquote></table></ol><u id='bt4i7'></u><kbd id='bt4i7'><kbd id='bt4i7'></kbd></kbd>

          <acronym id='bt4i7'><em id='bt4i7'></em><td id='bt4i7'><div id='bt4i7'></div></td></acronym><address id='bt4i7'><big id='bt4i7'><big id='bt4i7'></big><legend id='bt4i7'></legend></big></address><dl id='bt4i7'></dl>

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

            • 时间:
            • 浏览:18
            • 来源:124软件资讯网

                所谓并发服务器就是在统一个时刻可以处置惩罚来自多个客户端的请求;循环服务器是指服务器在统一时刻只可以响应一个客户端的请求  。而且对于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上面  。这也会带了一些问题  ,如由于服务器依次处置惩罚客户的请求 ,以是可能导致友的客户会等候良久  。