taoweb: 最近撸的一个超简单的Web(HTTP)服务器

陪她去流浪 桃子 2015年10月03日 阅读次数:2847

再来一个最近写的小玩意儿,taoweb,一个超简单小型的web(HTTP)服务器。虽然正值国庆之时,但其实开发开始于一个月之前。

taoweb 目前仅支持服务静态内容(输出静态文件,比如本地HTML浏览器,文件共享服务器),不支持动态内容(CGI,FASTCGI等,Python、PHP等都是经过前两者(或之一)与web服务器进行通信的)。仅在Visual Studio上开发,仅支持 Windows,但很容易被移植。

网络模型没有采用高端的IO模型(如IOCP完成端口,epoll),而采用的是多线程同步模型。工作过程是这样的:主线程接收来自客户端的连接,(在有必要时)创建工作线程,工作线程取一个代表客户端连接的数据结构并一一处理请求内容,工作线程服务完一个HTTP请求之后,把自己标记为空闲状态并加入到空闲队列,等待下一次的请求。这是一个非常简单的工作模式,采用这种方式有几个原因:1、本软件主要是实现一个简单的HTTP服务器,而不是讲通信模型的使用;2、本人对高效的异步通信模型不熟悉,不能灵活地使用;

项目源代码完全开源,托管在 GitHub 上面。这依然只是个仅供娱乐的项目,我不会花太多时间在其上面,也不可能会有完善它,能达到独当一面,或作为现有替代的想法。

代码经过了一些小小的封装,比如像 main 函数:

int main()
{
    using namespace taoweb;

    win_sock _wsa;

    socket_server server("127.0.0.1", 8080, 64);

    server.start();

    client_t client;
    while (server.accept(&client)) {
        create_worker_thread(client);
    }

	return 0;
}

看起来还算简单吧:初始化平台库,创建服务器,运行服务器,接受客户连接,创建处理工作线程。

源代码

GitHub地址:https://github.com/movsb/taoweb.git

开发工具:VisualStudio2013 + C++11。

这篇文章的内容已被作者标记为“过时”/“需要更新”/“不具参考意义”。

标签:HTTP · 我的小项目