标签归档:服务器框架

RSS feed of 服务器框架

最后更新于 .

这几天的心情非常好,主要原因是我们把服务器端的架构升级到了 2.0,这样最大的一个好处就是:

Server重启完全不会影响外网服务

所以,也是想趁此机会,服务器端整个发展的历程,跟大家分享一下,干货比较多,框架代码也会全部开源:)

 

一. 农业时代

创业最重要的就是一个“快”字,所以最开始的时候,所有的架构都以快速出模型为前提。

而常看我博客的朋友应该知道我对python情有独钟,所以自然的,python成为了我开发服务端框架的语言。

python自带的多线程tcp服务器框架非常简单:ThreadingTCPServer,即每个链接一个线程的模式:

import SocketServer

class RequestHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        f = self.request.makefile('r')

        while True:
            message = f.readline()
            if not message:
                print 'client closed'
                break
            print "message, len: %s, content ...

最后更新于 .


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

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

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
#include
#include
#include
#include
#include

#include "bayonet_frame.h"
using namespace std;

#define APP_FSM_PROXY 2000
#define APP_FSM_LOGIC2 2001

/**
* @brief 获取ContentLen的数字的起始和长度
*
* @param strHttpBuf
* @param len
*
* @return
*/
size_t GetContentLenPos ...