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

陪她去流浪 桃子 编辑 阅读次数:3354

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

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

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
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 · 我的小项目

文章评论 8 发表评论 登出
  1. ahu https://52q.net

    你这个博客风格跟涛叔https://taoshu.in/的几乎一模一样,你俩谁先?

    1. 桃子

      我不认识他,但是看他的第一篇文章是 2018 年写的。如果是这样的话,我应该早于他,我是 2014 年开始建博客的,博客程序重写于 2015 年,自那时候起差不多就是这个样式了。整体几乎一直没变。

    2. layty http://lyt888.club
      这个太适合配合另外一个由markdown 生成网页的工具了 感谢
      1. 桃子
        呃……,可以考虑用其它方便的语言写一个HTTP服务器,因为这个确实是随便写的,BUG可能很多。 比如用Go,要不到10行代码就可以写一个。超级简单。
      2. layty http://lyt888.club
        这个是怎么加载目录呢
        1. 桃子
          Exe所在的目录为根目录。 这个是随便写着练手玩玩的噢。 GitHub上面的版本增加了对cgi、lua、php、bat脚本的支持。
          1. layty http://lyt888.club
            哇,回复了 哈哈
            1. 桃子
              哈哈,评论一般都会回复的。?
        还没有用户发表过评论,我要发表评论
        编辑评论