Skip to content

Latest commit

 

History

History
36 lines (28 loc) · 2.13 KB

README.md

File metadata and controls

36 lines (28 loc) · 2.13 KB

kanon_httpd

Introduction

kanon_httpd是一个简易http服务器。其网络模块依赖于个人编写的kanon网络库,因此只能在linux/unix-like平台上运行(暂不考虑跨平台)。
该服务器可以接受和处理http请求并返回静态或动态页面。同时,也支持长连接和短连接(i.e. keep-alive)。

相较于传统的CGI + fork-and-execute模型返回动态页面,我使用较为现代的方式:将共享目标文件(shared object file, e.g. *.so) 作为插件(plugin)来提供这类服务。

动态内容的提供者需要实现准备好的的接口类,至于生成的共享文件放哪取决于你自己,包括生成方法。

Approach Advantage Disadvantage
CGI + fork-and-exec 实现简单;语言无关 性能低下(每个请求都得调用fork()和execve())
Shared object 性能最好(本质是一次函数调用) 语言相关,若其他语言要支持受其标准约束
Fast CGI 性能相比fork-and-exec有所提升(一定程度缓解了传统CGI的问题);允许独立于本机,即可以支持分布式部署;语言无关 实现较为复杂

Server Options

该服务器支持一些命令行选项,你可以通过键入--help查看详细的描述。
(命令行选项由个人编写的takina支持)

$ ./httpd --help

Build

该项目依赖于kanon。根据它的github页面进行安装,同时,kanon和该项目都是通过cmake构筑的,因此你还得安装cmake

在项目根目录有一个shell脚本来构筑整个项目,你也根据自己的需要取修改它。

Run & Test

打开Web浏览器,并输入URL: http://Hostname/将会访问其主页。
我准备了一个简单的动态页面: adder
你可以通过以下方式访问它:

  • GET: http://Hostname/contents/adder?a=*&b=*
  • POST: http://Hostname/html/post_test.html/

TODO

  • Fast CGI