博客这几天由于服务器的问题打不开,在这里跟大家抱歉啦

老读者应该都知道,笔者有两个开源项目,分别是:

fuload: 性能测试工具,可以用来给服务器做压力测试
bayonet: 基于两层状态机的epoll服务器框架

对于fuload的介绍,请看这里:
fuload开源压力测试框架完成!

对于bayonet的介绍,请看这里:
有限状态机的C++实现(1)-epoll状态机
有限状态机的C++实现(2)-bayonet开源网络服务器框架

之前由于工作等原因,bayonet一直被搁置,最近有时间,所以就抓紧把bayonet完成了,目前功能上基本已经OK了,我简单列一下功能点:

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

代码编写中,也用到了很多技术,如引用计数来保证野指针不被访问(通过引用计数解决野指针的问题(C&C++)),延迟析构对象,等等。

由于详细介绍是个很庞大的工作,所以这里就直接放出一个基于bayonet写的http代理,我们来看一下,只需要多少代码:

所有发往服务器的http请求,都会被转发到 10.6.207.189 的 80 端口,然后返回给调用端。
这就是所有需要调用端编写的代码了,如果去掉HTTP协议解析的那两个函数,并且去掉空行,一共才不到160行代码。而且你可以随意的再网上加逻辑状态,比如想要在拿到客户端请求之后,再去login服务器验证一下登录态,那只要在注册一个新的状态即可。
如果想看更多的例子,可以去svn上看如下路径的代码:
http://code.google.com/p/bayonet/source/browse/#svn%2Ftrunk%2Fsrc%2Fsvr
http://code.google.com/p/bayonet/source/browse/#svn%2Ftrunk%2Fsrc%2Fsvr2
http://code.google.com/p/bayonet/source/browse/#svn%2Ftrunk%2Fsrc%2Fhttp

当然,现在也还有很多问题,比如性能还没有做优化,各位如果有兴趣的话,欢迎和我一起完成剩下的性能调优工作,我相信这个过程一定比编码阶段有聊的多~

暂无相关产品

8则回应给“bayonet开源网络服务器框架正式完成!”

  1. moper说道:

    说实话,感觉有点高深,呵呵。很厉害的呢,加油~

    [回复]

  2. liu1061说道:

    不得啊,你在这方面走的好远啊! 我看你在开源这方面了得,看到你常用nginx, 我现在在看这个源码,看的也是一头晕, 可否给指点一下啊! 谢谢,我可是你的Blog的常客啊!呵呵!

    [回复]

    Dante 回复:

    过奖哈,只是想多练练手,也沉淀一下。
    文中的链接有详细的介绍了bayonet的设计思路,可以看一下哈
    其实代码本身不是很复杂,比起ngx的复杂度差得远。。。

    [回复]

  3. vivi说道:

    支持一下 , 感觉不错。

    [回复]

  4. bopy说道:

    楼主,直接编译不过,查了下是#include在高版本的linux里面已经没有了,可以修改为gcc提供的__sync_*系列的built-in函数。 最简单的办法是改为#include 但是要安装libasound2-dev. 支持楼主!

    [回复]

    bopy 回复:

    晕….尖括号不能显示 第一处为 asm/atomic.h 第二处是alsa/iatomic.h

    [回复]

  5. [...] bayonet开源网络服务器框架正式完成! [...]

发表评论