阅读更多

6顶
0踩

编程语言

原创新闻 SPProcPool 0.5 发布

2008-01-05 22:56 by 见习记者 iunknown 评论(0) 有6261人浏览
SPProcPool 是一个 linux/unix 平台上的进程池服务器框架,使用 c++ 实现。

在 0.5 版中增加了一个类似 apache worker 的服务器模型。在之前 Leader/Follower 模型的基础上,在每个子进程中使用一个固定大小的线程池来为每个请求服务。这个模型的特点是能够支持较高的并发连接数。

项目主页:
http://code.google.com/p/spprocpool/

下载地址:
http://spprocpool.googlecode.com/files/spprocpool-0.5.src.tar.gz

SPProcPool 服务器框架的使用比较简单。下面以一个简单的服务器为例进行说明。

这个服务器是模仿《unix网络编程(第二版)》(中文版)第27章的服务器。服务器从 socket 读入包含一个数字的一行,然后根据这个数字返回相应的内容。

SPProcPool 提供的 SP_ProcMTServer 类就是在 0.5 版新增的服务器模型。这个类定义如下:

class SP_ProcMTServer {
public:
    SP_ProcMTServer( const char * bindIP, int port,
            SP_ProcInetServiceFactory * factory );
    virtual ~SP_ProcMTServer();

    virtual int start();
};


从接口中可以看到,要使用 SP_ProcMTServer ,需要提供一个 SP_ProcInetServiceFactory 类的实例。这个类相关的定义如下:

class SP_ProcInetService {
public:
    virtual ~SP_ProcInetService();

    virtual void handle( int socketFd ) = 0;
};

class SP_ProcInetServiceFactory {
public:
    virtual ~SP_ProcInetServiceFactory();

    virtual SP_ProcInetService * create() const = 0;

    virtual void workerInit( const SP_ProcInfo * procInfo );

    virtual void workerEnd( const SP_ProcInfo * procInfo );
};


这里使用的是典型的抽象工厂方法。在工厂类中,除了 create 方法之外,还有两个特别的方法:workerInit 和 workerEnd 。workerInit 在子进程开始运行的时候被调用,workerEnd 在子进程退出的时候被调用。在 Service 类中,只有一个 handle 方法,它的参数就是已经 accept 到 socket 。

要实现这个简单的服务器例子,代码如下:

class SP_ProcUnpService : public SP_ProcInetService {
public:
    SP_ProcUnpService() {}
    virtual ~SP_ProcUnpService() {}

    virtual void handle( int sockfd ) {
        int ntowrite;
        ssize_t nread;
        char line[MAXLINE], result[MAXN];
    
        for ( ; ; ) {
            if ( (nread = read(sockfd, line, MAXLINE)) == 0) {
                return;     /* connection closed by other end */
            }
    
            /* line from client specifies #bytes to write back */
            ntowrite = atol(line);
            if ((ntowrite <= 0) || (ntowrite > MAXN)) {
                syslog( LOG_WARNING, "WARN: client request for %d bytes", ntowrite);
                exit( -1 );
            }
        
            SP_ProcPduUtils::writen(sockfd, result, ntowrite);
        }       
    }           
};   

class SP_ProcUnpServiceFactory : public SP_ProcInetServiceFactory {
public:     
    SP_ProcUnpServiceFactory() {}
    virtual ~SP_ProcUnpServiceFactory() {}
            
    virtual SP_ProcInetService * create() const {
        return new SP_ProcUnpService();
    }           

    virtual void workerInit( const SP_ProcInfo * procInfo ) {
        signal( SIGINT, SIG_DFL );
        printf( "pid %d start\n", (int)procInfo->getPid() );
    }

    virtual void workerEnd( const SP_ProcInfo * procInfo ) {
        printf( "pid %d exit, pipeFd %d, requests %d, lastActiveTime %ld\n",
                (int)procInfo->getPid(), procInfo->getPipeFd(),
                procInfo->getRequests(), procInfo->getLastActiveTime() );
    }
};

int main( int argc, char * argv[] )
{
    SP_ProcMTServer server( "", 1770, new SP_ProcUnpServiceFactory() );

    server.start();

    return 0;
}

6
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • [转帖]《圣经》中最令人们动容的十句话

    《圣经》是一部令人动容、令人...下面列出《圣经》的众多名言警句中最让我动容的十句,以资参考讨论。 这里先解释“动容”一词的含义:既包括感性的“激动”,也包括理性的“思考”。最重要的是对内心深处的触动。 1

  • 随着年龄的增长,为之动容的句子,就越来越多

    一、希望你一生没有软肋,不像我,别人提到你,我就输了。 二、我只有两个心愿:你在身边,在你身边。...随着年龄的增长,为之动容的句子,就越来越多 五、我不能给你全世界,但是我的世界可以全部给...

  • 管理专业必懂的部分知识

    &lt;/span&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/wbr&gt;&lt;/span&gt;&lt;/wbr&gt;&lt;/p&gt; &lt;div class="spctrl"&gt;&lt;span style="color:#000000"&gt;&lt;/span&gt;&lt;/div&gt;...

  • 祛魅设计模式:封神的三十年

    这大概是软件行业里第一篇大规模且系统地将面向对象编程方法论以设计模式的形式展现给人们的技术文献了,但他当时似乎并未意识到自己所做的观察、抽象、描述工作与Alexander模式语言之间的联系,也并未意识到寥寥...

  • 史上最全法则、效应大全,看一遍受用终身!

    羊群效应最早是股票投资中的一个术语,主要是指投资者在交易过程中存在学习与模仿现象,“有样学样”,盲目效仿别人,从而导致他们在某段时期内买卖相同的股票。 羊群效应理论(The Effect of Sheep Flock) 在一群羊...

  • 二十个经典管理学定律

     从这个角度看,工作中的鲶鱼代表着丰富的工作内容、令人来劲的责权利、充满挑战的工作期望、新鲜的其他岗位体验等等。对于领导者和人力资源管理者而言,是否要在工作中设置鲶鱼工作、在什么层次上设置鲶鱼工作,都...

  • 常识中的社会学理论

    从这个角度看,工作中的鲶鱼代表着丰富的工作内容、令人来劲的责权利、充满挑战的工作期望、新鲜的其他岗位体验等等。对于领导者和人力资源管理者而言,是否要在工作中设置鲶鱼工作、在什么层次上设置鲶鱼工作,都...

  • 社会中的各种定律

    从这个角度看,工作中的鲶鱼代表着丰富的工作内容、令人来劲的责权利、充满挑战的工作期望、新鲜的其他岗位体验等等。对于领导者和人力资源管理者而言,是否要在工作中设置鲶鱼工作、在什么层次上设置鲶鱼工作,都将...

  • 各种自然界中的效应收集

     从这个角度看,工作中的鲶鱼代表着丰富的工作内容、令人来劲的责权利、充满挑战的工作期望、新鲜的其他岗位体验等等。对于领导者和人力资源管理者而言,是否要在工作中设置鲶鱼工作、在什么层次上设置鲶鱼工作,都...

  • 各种自然界中的效应收集 .

     从这个角度看,工作中的鲶鱼代表着丰富的工作内容、令人来劲的责权利、充满挑战的工作期望、新鲜的其他岗位体验等等。对于领导者和人力资源管理者而言,是否要在工作中设置鲶鱼工作、在什么层次上设置鲶鱼工作,都...

  • 各种管理学中的效应

     从这个角度看,工作中的鲶鱼代表着丰富的工作内容、令人来劲的责权利、充满挑战的工作期望、新鲜的其他岗位体验等等。对于领导者和人力资源管理者而言,是否要在工作中设置鲶鱼工作、在什么层次上设置鲶鱼工作,都...

  • 管理学中的知识

    从这个角度看,工作中的鲶鱼代表着丰富的工作内容、令人来劲的责权利、充满挑战的工作期望、新鲜的其他岗位体验等等。对于领导者和人力资源管理者而言,是否要在工作中设置鲶鱼工作、在什么层次上设置鲶鱼工作,都将...

  • [转] 管理学中的各种理论

    从这个角度看,工作中的鲶鱼代表着丰富的工作内容、令人来劲的责权利、充满挑战的工作期望、新鲜的其他岗位体验等等。对于领导者和人力资源管理者而言,是 否要在工作中设置鲶鱼工作、在什么层次上设置鲶鱼工作,都...

  • 于丹论语心得

    陶渊明曾经当过八十三天的彭泽令,那是一个很小的官。而一件小事,便让他弃官回家。 有人告诉他,上级派人检查工作,您应当“束带见之”。就如同今天,你要穿正装,扎上领带,去见见领导。 陶渊明说,我不能为...

  • New Age音乐启蒙与经典选介

    有这样一句话:一张从心底触动灵魂感官的钢琴音乐,他的双眼几乎看不见,但是他的音乐却意外的澄清剔透……也许正是因为看不见这个浑浊的世界,所以他有一颗清澈的心,能够描绘这样清澈的音乐,很难有几个人能把钢琴...

  • 世界名著100部简介

    而在影片《傲慢与偏见》中饰演伊丽莎白的葛丽尔·嘉逊,却令这个人物在银幕上得以重生,更加深入人心。 葛丽尔·嘉逊于1908年9月29曰出生于英国北爱尔兰。曾就读于伦敦大学,毕业后又到法国葛雷诺博大学学习过,尽管...

  • 曾有一个人,爱我如生命(3)

    第十一章   一切都已结束, 不再藕断丝连。 我最后一次拥抱你的双膝, 说出令人心碎的话语。 一切都已结束, 回答我已听见, 我不愿再一次将自己欺骗。也许,往事终会将我遗忘, 我此生与爱再也无缘。 ----------...

  • 社会性动物(艾略特•阿伦森)

    阿伦森是美国心理学会110年历史上唯一一位获得杰出著作奖(1975年)、杰出教学奖(1980年)和杰出研究奖(1999年)三项大奖的心理学家,而他的《社会性动物》被誉为“美国社会心理学的《圣经》”。 “从本质上讲人...

  • python入门-30.寻找列表中只出现一次的数字-寻找单身狗.py

    python入门-30.寻找列表中只出现一次的数字——寻找单身狗.py

  • 布尔教育linux优化笔记

    linux优化笔记,配套视频:https://www.bilibili.com/list/474327672?sid=4496133&spm_id_from=333.999.0.0&desc=1

Global site tag (gtag.js) - Google Analytics