并发服务器

摘要:
一个好的解决方案是使用并发服务器框架,流程图如下:并发服务器的通用模型代码如下:int main{socket(…服务器程序退出后,侦听器套接字关闭。可以看到,在并发服务器的代码框架中,套接字的创建和关闭是一对一的。可以使用此方法检查您的程序是否正确。使用并发服务器程序的代码框架时,需要注意以上两个问题。

 

从之前的程序中也可以总结出来一般面向连接的服务器程序的代码框架,一般的模型如下所示:

int main()
{
       socket(…);
       bind(…);
       listen(…);
       while(1)
      {
              accept(…);
              while(1)
              {
                     pead(…);
                     process(…);
                     write(…);
            }
            close(…);
      }
    return 0;
}               

这种面向连接的服务器有一个很大的弊端:服务器一次只能处理一个客户端的请求,只有在这个客户的所有请求都满足之后,服务器才能继续处理后面的请求。如果有一个客户端占用服务器,后边的客户机都不能工作。这样的模型效率太低,不适合实际使用。一种很好的解决办法就是使用并发服务器的框架,流程图如下:

 并发服务器第1张

并发服务器的一般模型模型代码如下:

int main(void)
{
       socket(…);
       bind(…);
       listen(…);
    while(1)
    {
        accept(…);
        if(forhk(…) == 0)
        {
              while(1)
              {
                   close(…);
                   read(…);
                   process(…);
                   write(…);
               }
                close(…);
                exit(…);
        }
        else
       close(…);
    }
    close(…);
    return 0;
}                               

上边的模型中,子进程负责处理连接请求,因此关闭监听套接字;父进程继续监听连接请求,因此关闭连接套接字。当服务器程序退出后,则关闭监听套接字。由此可见,在并发服务器的代码框架中,套接字的创建和关闭也是一一对应的,可以使用这种方法来检查自己的程序是否正确。

对于面向连接的服务器,并发服务器可以解决循环服务器客户机独占服务器的情况,但是也存在一些新的问题:

1、服务器要创建子进程来处理客户端的连接请求,但是创建子进程是一种非常消耗资源的操作。为了提高效率必须使用更好的算法。

2、子进程结束运行后,注意对其资源的回收,否则会造成大量的僵尸进程,这可能会导致系统崩溃。

在使用并发服务器程序的代码框架的时候,需要注意上边这两个问题。

免责声明:文章转载自《并发服务器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python-unittest执行顺序SQL 03下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

CAD转DXF怎么转换?教你三种转换方法

2.进入到CAD版本转换的界面中后,在选择“点击选择文件”,在跳转出的“打开”界面中打开需要转换的CAD图纸。...

xcode模拟器不显示键盘解决方案

当我们使用Xcode进行开发时,我们并不总是需要在iPhone上运行代码。有时模拟器可以解决这些问题。但当你使用模拟器时,你会发现,如果你使用模拟器上的键盘在TextFiled中输入信息,这是可以的,但如果你使用键盘输入信息,那么你会发现模拟器上的屏幕将不再显示。这是因为默认情况下,xcode使用计算机键盘作为外部键盘,不会弹出虚拟键盘。...

IIS 中 "另一个程序正在使用此文件,进程无法访问!"

然而,自从昨晚重新启动机器后,发现iis无法启动。手动启动并提示:“另一个程序正在使用此文件,进程无法访问它!”百度得知这是由港口冲突造成的。什么软件使用端口80?同时,我更改了iis的默认端口80,没问题。接下来,我想知道是哪一方秘密占用了端口80。但是,在执行上述命令后,我没有找到占用端口80的程序。我惊讶地发现没有人占用端口80。...

arcgispro 计算字段示例

使用两个或四个空格来定义每个逻辑级别。Python计算表达式字段将使用感叹号(。简单计算简单字符串示例一系列Python字符串函数支持使用字符串。字符串字段中的字符可以通过索引和拆分操作访问“”bcd“”Python还支持使用format()方法的字符串格式!)常用Python字符串操作简单数学示例Python提供了处理数字的工具。...

java.net.URISyntaxException的解决办法

直接采用Stringurl=“http:count=1”;HttpGethttpget=新的HttpGet(url);HttpResponseresponse=client.execute(httpget);例如,“|”&因此,不能直接使用String而不是URI来访问。然后我们可以使用URL生成URI的方法来解决这个问题。代码如下:URLu...

vscode 用户设置与工作区设置

用户设置与工作空间设置VSCode提供了两种设置方式:-用户设置:这种方式进行的设置,会应用于该用户打开的所有工程;-工作空间设置:工作空间是指使用VSCode打开的某个文件夹,在该文件夹下会创建一个名为.vscode的隐藏文件夹,里面包含着仅适用于当前目录的VSCode的设置,工作空间的设置会覆盖用户的设置。更改默认用户设置与工作空间设置VSCode的设置...