档案日期2011的24

2011年6月13日 - 2011年6月19日

最后更新于 .

博客这几天由于服务器的问题打不开,在这里跟大家抱歉啦 老读者应该都知道,笔者有两个开源项目,分别是: fuload: 性能测试工具,可以用来给服务器做压力测试 bayonet: 基于两层状态机的epoll服务器框架 对于fuload的介绍,请看这里: fuload开源压力测试框架完成! 对于bayonet的介绍,请看这里: 有限状态机的C++实现(1)-epoll状态机 有限状态机的C++实现(2)-bayonet开源网络服务器框架 之前由于工作等原因,bayonet一直被搁置,最近有时间,所以就抓紧把bayonet完成了,目前功能上基本已经OK了,我简单列一下功能点:

  1. 接管了网络,调用方只需要关心业务逻辑
  2. 配置的方式,快速切换TCP-UDP
  3. 快速的增加加状态机的状态,业务可以无限拓展

代码编写中,也用到了很多技术,如引用计数来保证野指针不被访问(通过引用计数解决野指针的问题(C&C++)),延迟析构对象,等等。 由于详细介绍是个很庞大的工作,所以这里就直接放出一个基于bayonet写的http代理,我们来看一下,只需要多少代码:

#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include ...

最后更新于 .

C/C++代码中,野指针问题历来已久,当然,大家都知道new/delete要成对出现:

A *p = new A();
delete p;
p = NULL;

然而现实中却并不是总是如此简单,考虑如下例子:

class A
{
public:
    C() {}
    virtual ~C() {}
};
class B
{
public:
    B() {
        m_pA = NULL;
    }
    virtual ~B() {}

    void SetA(A* p)
    {
        m_pA = p;
    }

private:
    A* m_pA;
};

A* pA = new A();
B* pB = new B();
pB->SetA(pA);

delete pA;
pA = NULL;
//此时B中的m_pA已经无效 ...

每日归档

上周

2011年度第 21 周

下周

2011年度第 25 周

归档