HttpServer:一款Windows平台下基于IOCP模型的高并发轻量级web服务器
HttpServer的特点
1、完全采用IOCP模型,实现真正的异步IO,高并发、高可靠;
2、支持4G以上文件下载;
3、支持断点续传;
4、轻量级,体积小,服务器文件仅200多K,无任何依赖库;
5、支持CGI网关,通过CGI.xml可动态配置各种网关接口,实现动态交互;
6、内置上传文件接口;
点击此处下载
一、命令行参数介绍
启动服务器: HttpServer.exe -W d:\web -H index.html -P 80 -M 10000
-W : web网站的发布路径,如:d:\web,如果路径中有空格,可使用双引号。
如不指定,则会在当前服务运行的目录下创建web目录,并以此为web网站目录。
-H :web网站的主页,如:index.html,
如果不指定主页,则显示web目录的文件清单,可作为简单的文件服务器使用。
-P : web服务的端口号,缺省值为80。
-M :最大并发量,缺省值为20000。
其它参数(后面不带值,参数存在则表示容许或使用):
-AllowUpload : 容许上传
-CacheM :使用缓存(具体含义见下节的"UseCacheMem"字段)
-CacheC : 使用缓存(具体含义见下节的"UseCacheClass"字段)
缺省值是指,如果该命令参数不指定,服务器使用的默认参数。
HttpServer也可以通过配置文件进行参数设置,配置文件为HttpServer.ini。
二、配置文件参数介绍
HttpServer可通过HttpServer.ini文件进行参数配置,参数更加丰富,是对命令行参数的补充。
WebPath : web网站的发布路径,等同于命令行参数"-W"。
HomePage:web网站的主页,等同于命令行参数"-H"。
Port: web服务的端口号,等同于命令行参数"-P"。
TimeOut: 超时,单位秒,缺省值为60秒。
MaxConn: 最大并发数,等同于命令行参数"-M",缺省值为20000。
PostDataPath: 上传数据的保存路径,缺省值为当前用户的temp目录。
1、使用场景一:用户在上传文件时,上传文件保存的临时路径;
2、使用场景二:post请求时,如果用户post数据过大,超过"MaxPostCacheFileSize"字段指定的阀值, 则转为文件存储,防止内存使用过大;
MaxPostCacheFileSize: POST请求时,接收POST数据cache缓存的最大值,如果超过该值,则将缓存转存为文件,单位为字节BYTE;
MaxUploadFileSize:最大上传文件尺寸,单位M字节,缺省值为2G。
UseCacheMem:是否使用缓存,缺省值为0,表示不使用。 如使使用缓存,则服务器会用空间换时间,预先开辟若干连续的大内存块,并重载malloc和free函数,在预先开辟的大内存块中寻找可用的“碎片化”内存,从而减少在高并发下频繁的申请和销毁内存导致的速度变慢。
UseCacheClass:是否使用结构体(struct/class)缓存,缺省值为0,表示不使用。 如使用该值,则服务器会用空间换时间,即:根据MaxConn指定的并发数,预先开辟出指定的内存空间, 如果MaxConn为2万,则会开辟对应2万个结构体(struct/class)用于保存HTTP会话时的上下文(context)数据。 同上,该值也是为了减少在高并发下频繁的申请和销毁内存导致的速度变慢。
UseMappingFile: 是否使用Mapping File方式访问磁盘文件,缺省值为1,表示使用。
AccessControlAllowOrigin: 是否容许跨域,缺省值1,表示容许。
PrintMessage:是否在控制台输出HTTP请求,缺省值1,表示打印输出。
注: 高并发时务必关闭控制台输出!!!
AllowUpload:是否容许上传,缺省值为0,表示不容许。
AllowCacheFile:是否容许文件缓存,缺省值为1,表示容许,该值有效时,会对文件进行缓存,避免频繁的进行磁盘文件操作。
MaxCacheFileSize:最大缓存的文件尺寸,缺省值为5(单位M),小于该值的文件会加载到内存中,后续访问将不再从磁盘中读取而是直接读内存。
三、Content-Type类型设置
通过ContentType.ini该配置文件,用户可添加指定文件类型的Content-Type类型,当浏览器从服务器读取文件时,
服务器会根据该配置文件返回指定的Content-Type给浏览器。
配置格式为如下,.文件扩展名:Content-Type
.mp4:video/mp4,表示如果是mp4文件,则Content-Type为video/mp4。
.cc:text/plain,表示如果是cc文件,则content-Type为text/plain。
四、CGI网关设置
CGI网关设置在CGI.xml文件中。各节点含义如下:
path:CGI网关文件所在的目录,这里是全路径,该路径不一定在发布的web目录下(不在web目录下会更安全)。
timeout:执行网关程序的超时,单位秒,缺省值为10秒,防止有的网关程序不退出,或长时间不退出。
cgi:子节点,每个cgi子节点代表一个CGI网关类型。
cgi/name:该CGI节点名称,比如python,表示该CGI中的网关文件是python脚本。
cgi/exe:执行该脚本的应用程序全路径,如:c:\python25\python.exe。
cgi/action:响应配置,该节点代表一个需要处理的Http请求命令(在服务端则为一个应用),该节点有两个字段,如下:
cgi/action/appname:url中的请求命令(应用名),如:python/test1.do
cgi/action/filename:处理上述请求的文件,如:test1.py,该文件必须在上述path节点指定的目录中。
说明:当用户发送 http://server:port/python/test1.do请求时,网关会执行test1.py脚本,并将脚本执行的结果返回给浏览器。
1、QUERY-SRING数据的传递
python/test1.do?key1=value1&key2=value2
"key1=value1&key2=value2"会通过命令行参数的方式传递给调用者。
python中为:sys.argv[1],详见案例:test2.py。
2、POST-DATA数据的传递
POST数据的传递通过读取标准的输入获取,python中为:sys.stdin.readline(),详见案例:test1.py。
注意:
1、HttpServer没有通过环境变量来传递QUERY-STRING;
2、CGI网关数据返回时,服务器会自动添加Content-Length字段(根据返回数据“\r\n\r\n”来计算HTTP响应头和响应体的各自长度);
3、如果CGI网关返回数据中没有"\r\n\r\n"来分割HTTP响应头和响应体,则服务器会认为响应数据是明文,并自动添加类型为“text/plain”的响应头,并返回给浏览器;
用户可根据需要配置多个cgi子节点,用于处理不同类型的网关程序(或脚本)。 cgi配置的保留节点有两个,一个是bat,一个是exe。对于windows下的bat格式脚本文件,是不需要指定执行程序,同样exe文件也是。
网关配置文件如下:

python 网关文件案例:

BAT批处理网关文件案例:

exe网关文件案例:

五、内置上传接口
接口名称:command/upload.do
使用post命令,可将文件上传到web发布目录。
如果要将文件上传至web目录的子目录中,可通过path参数指定,如下
command/upload.do?path=subfolder,subfolder为相对于web目录中的子目录。

HttpServer:一款Windows平台下基于IOCP模型的高并发轻量级web服务器的更多相关文章
- windows平台下基于QT和OpenCV搭建图像处理平台
在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...
- windows平台下基于VisualStudio的Clang安装和配置
LLVM 是一个开源的编译器架构,它已经被成功应用到多个应用领域.Clang是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程 ...
- HttpServer: 基于IOCP模型且集成Openssl的轻量级高性能web服务器
2021年4月写过一个轻量级的web服务器HttpServer,见文章: <HttpServer:一款Windows平台下基于IOCP模型的高并发轻量级web服务器>,但一直没有时间添加O ...
- 叙Windows平台下基于MBR和UEFI的bootkit(一)--以MBR为例
安全的对抗首先在权限方面,权限高的进程对权限低的权限就是就是降维打击,无往不利.当权限相同时,启动得早便为王.所谓的bootkit也就是基于这个思路设计的一种复杂病毒.它优先于Windows系统启动, ...
- Windows 环境下基于 nginx 的本地 PyPI 源
Windows 环境下基于 nginx 的本地 PyPI 源的搭建: 1.登录 nginx 官网,下载安装包
- MongoDB学习总结(一) —— Windows平台下安装
> 基本概念 MongoDB是一个基于分布式文件存储的开源数据库系统,皆在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB将数据存储为一个文档,数据结构由键值key=>val ...
- Windows 平台下局域网劫持测试工具 – EvilFoca
简介 安全测试工具可能含有攻击性,请谨慎适用于安全教学及学习用途,禁止非法利用! EvilFoca是Windows环境下基于.NET FrameWork的一款轻量级的劫持测试工具.与BackTrack ...
- windows平台下压缩tar.gz
windows平台下很多压缩软件(如360压缩)都支持tar.gz的解压,但不支持压缩 推荐一款支持tar.gz压缩的软件7zip 下面介绍可视化和命令行两种操作方式将文件压缩为tar.gz 可视化操 ...
- Django 1.6在Windows平台下的配置
Django 1.6 在Windows平台下的配置 前言 最近两天研究了下Django1.6在Windows平台中的配置安装,服务器采用Apache.期间遇到过许多新手所遇到的各种问题,也算是一种宝贵 ...
随机推荐
- hdu4829 带权并查集(题目不错)
题意: Information Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- Caddy-基于go的微型serve用来做反向代理和Gateway
1.简单配置 2.go实现,直接一个二进制包,没依赖. 3.默认全站https 常用 反向代理,封装多端口gateway 使用:启动直接执行二进制文件 caddy 就行 根据输出信息 直接https: ...
- vscode 将本地项目上传到github、从github克隆项目以及删除github上的某个文件夹
一.将本地项目上传到github 1.创建本地仓库(文件夹) mkdir study//创建文件夹studycd study //进入study文件夹 2.通过命令git init把这个文件夹变成Gi ...
- mac打开class文件
本来不想写这个东西的.但是这个却费了我一番周折. 我要先声明一点的是,我从来不讲iOS当成一个单独的系统,而是将这个操作系统归位unix内核的系统. 简单来说,我把它当成linux在用. 但是,mac ...
- svn客户端访问失败,错误“请求的名称有效,但是找不到请求的类型”的解决
1.问题描述:visualSVN客户端在其他机子访问出现以下问题(服务端装在我的电脑上,我本机客户端可以正常访问) 2. 原因分析:SVN客户端访问服务器需要输入URL地址,URL地址分为两种方式.一 ...
- java+selenium使用JS、键盘滑动滚动条
本篇文章介绍如何使用JS和键盘对象对页面进行滑动滚动条-------------主要针对java做自动化测试的同学 一:使用键盘对象操作滚动条 //导包 import org.openqa.selen ...
- Redis6.x学习笔记(二)持久化之RDB
前言 最近学习Redis6.x,特做笔记以备忘,与大家共学.课程是从私塾在线下载的,他们把架构师课程都放出来了,大家可以去下载学习,不要钱的,地址是http://t.hk.uy/eK7,课程很不错,值 ...
- 计算机网络参考模型,IP地址及MAC地址查看方法,数据包封装过程
分层思想 首先,计算机网络参考模型,是基于分层思想而出现的.分层思想,就是将复杂流程分解为几个功能单一的子过程. 优点: 可以让整个流程更加清晰, 让复杂问题简单化, 更容易发现问题,并真对性的解决问 ...
- Java GUI学习,贪吃蛇小游戏
JAVA GUI练习 贪吃蛇小游戏 前几天虽然生病了,但还是跟着狂神学习了GUI的方面,跟着练习了贪吃蛇的小项目,这里有狂神写的源码点我下载,还有我跟着敲的点我下载,嘿嘿,也就注释了下重要的地方,这方 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十二)——istio+dapr构建多运行时服务网格
多运行时是一个非常新的概念.在 2020 年,Bilgin Ibryam 提出了 Multi-Runtime(多运行时)的理念,对基于 Sidecar 模式的各种产品形态进行了实践总结和理论升华.那到 ...