首页 > 其他 > 详细

迭代服务器 和 并发服务器 的程序框架

时间:2014-03-07 17:06:14      阅读:448      评论:0      收藏:0      [点我收藏+]

前言

大多数TCP服务器是并发的,大多数UDP服务器是迭代的。

如果服务一个客户请求的时间不长,使用迭代服务器没有太大问题,一旦客户请求的时间需要花费很长,不希望整个服务器被单个客户长期占用,而希望同时服务多个客户,就需要选择并发服务器了。

迭代服务器程序框架

bubuko.com,布布扣
int listenfd,connfd;
listenfd = socket( ... );
bind(listen, ... );
listen(listenfd,LISTENQ);
for(;;)
{
    connfd = accept(listenfd, ... );
    doit(connfd);
    close(connfd);
}
bubuko.com,布布扣

并发服务器程序框架

bubuko.com,布布扣
pid_t pid;
int listenfd,connfd;
listenfd = socket( ... );
bind(listen, ... );
listen(listenfd,LISTENQ);
for(;;)
{
    connfd = accept(listenfd, ... );
    if((pid = fork()) == 0)
    {
        close(listenfd);
        doit(connfd);
        close(connfd);
        exit(0);
    }
    close(connfd);
}
bubuko.com,布布扣

注意

每个文件和套接字都有一个引用计数,引用计数在文件表项中维护,它是当前打开着的引用该文件或套接字的描述符的个数。socket返回后与listenfd关联的文件表项的引用计数为1。accept返回后与connfd关联的文件表项的引用计数也为1。然后fork返回后,这两个描述符就在父进程与子进程间共享(也就是被复制),因此与这两个套接字相关联的文件表项各自的访问计数值均为2。这么一来,当父进程关闭connfd时,它只是把相应的引用计数值从2减为1。该套接字真正的清理和资源释放要等到其引用计数值到达0时才发生。这会在稍后子进程也关闭connfd时发生。

 

参考自:http://sgy618.itpub.net:8080/23168012/viewspace-1044918/

迭代服务器 和 并发服务器 的程序框架,布布扣,bubuko.com

迭代服务器 和 并发服务器 的程序框架

原文:http://www.cnblogs.com/nufangrensheng/p/3584546.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!