HttpServer:一款Windows平台下基于IOCP模型的高并发轻量级web服务器

2023-10-27

HttpServer的特点
1、完全采用IOCP模型,实现真正的异步IO,高并发、高可靠;

2、支持4G以上文件下载;

3、支持断点续传;

4、轻量级,体积小,服务器文件仅200多K,无任何依赖库;

5、支持CGI网关,通过CGI.xml可动态配置各种网关接口,实现动态交互;

6、内置上传文件接口;

点击此处下载

SSL版本
HttpServer: 基于IOCP模型且集成Openssl的轻量级高性能web服务器

一、命令行参数介绍

启动服务器: 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文件也是。

点击此处下载,网关案例文件在cgi-bin目录中

网关配置文件如下:

图1:CGI网关配置文件

python 网关文件案例:
图2:test2.py(python网关脚本)

BAT批处理网关文件案例:
图3:test1.bat(bat网关脚本)

exe网关文件案例:
图4:test1.exe(exe网关程序)

五、内置上传接口

接口名称:command/upload.do

使用post命令,可将文件上传到web发布目录。

如果要将文件上传至web目录的子目录中,可通过path参数指定,如下

command/upload.do?path=subfolder,subfolder为相对于web目录中的子目录。

上传接口web前端调用

最后:祝使用愉快!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HttpServer:一款Windows平台下基于IOCP模型的高并发轻量级web服务器 的相关文章

随机推荐

  • keil 软件如何生成.hex文件

    1 当程序编译通过没错误了 按照下图步骤勾选 点击魔术棒 output界面 勾选hex 2 勾选完点击ok 再对程序进行编译 出现下图内容 则生成hex文件成功
  • C++ 学习笔记(二)

    C 继承与派生 1 公有继承 是指在源生一个类时继承方式为public的继承方式 在public继承方式下 基类成员在派生类中的访问权限为 基类的公有和保护成员的访问属性在派生类中不变而基类的私有成员不可访问 即基类的公有成员和保护成员被继
  • Vue中 element的table表格导入 与 导出为excel表格的实现

    Vue中 element的table表格导入 与 导出为excel表格的实现 一 导入 2 1 安装xlsx插件 2 2 新建导入功能组件 2 3 注册全局的导入excel组件 2 4 创建导入路由组件 2 5 封装导入接口 实现excel
  • QM二面

    目录 如何在笔记本上添加永久路由 扩展 Linux如何查看并杀死进程 模拟场景 动态路由协议和DNS的共同之处 如何在笔记本上添加永久路由 route print 查看路由表 添加路由的命令 route add 网段 mask 子网掩码 网
  • 从二叉树到堆排序

    目录 一 树 1 树的基本概念 2 二叉树 1 最常见表示二叉树的方法 2 满二叉树 3 完全二叉树 4 二叉树的性质 5 存储结构 二 堆 1 逻辑结构与存储结构 2 堆的特性 3 向下调整算法 4 建堆 5 堆排序 一 树 1 树的基本
  • 数据库模糊查询

    常用的模糊查询语句有 1 like 查询姓李的同学 使用like like 结合 代表多个字符 代表一个字符 SELECT id myname FROM aaa WHERE myname LIKE 李 like的用法就像我们使用百度搜索时啊
  • MQTT通讯之连接MQTT服务器

    根据 添加链接描述 和 添加链接描述 我的APP已经成功连接上MQTT服务器 至于怎么发布和接收 正在研究 研究好了 发上来 作者写的代码是Java的 但现在都推荐Kotlin 我就把转好的Kotlin代码发出来 package com e
  • Anaconda Python Pytorch (GPU) 配置

    目录 0 写在前面 1 Anaconda下载 1 1 下载 1 2 安装 1 2 1 设置安装路径 1 2 2 两个都勾上 1 3 查看conda版本 2 CUDA及cuDNN 2 1 查看是否可以安装CUDA 2 2 CUDA和Pytor
  • 【2022最新Java面试宝典】—— Java基础知识面试题(91道含答案)

    目录 一 Java概述 1 何为编程 2 什么是Java 3 jdk1 5之后的三大版本 4 Jdk和Jre和JVM的区别 5 什么是跨平台性 原理是什么 6 Java语言有哪些特点 7 什么是字节码 采用字节码的最大好处是什么 8 什么是
  • 什么是芯片?

    https zhuanlan zhihu com p 228757435 utm source weibo utm medium social utm oi 895441374156029952 utm content snapshot 什
  • k8s_day07_02

    k8s day07 02 静态密码方式认证k8s kubeconfig 1 kubeconfig 配置文件 在 etc kubernetes 有conf 结尾的文件 那个就是kubeconfig 类型的配置文件 用于控制节点组件 和api交
  • HBuilderX安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

    一 下载安装 1 在地址栏中直接输入https www dcloud io 2 点击箭头所指 进去过后点击DOWNLOAD 3 点击过后 选择自己所需要的版本 HBuilder目前有两个版本 一个是windows版 一个是mac版 下载的时
  • python垃圾回收

    Python内存管理机制 Python内存管理机制主要包括以下三个方面 引用计数机制 垃圾回收机制 内存池机制 引用计数 举个例子说明引用是什么 a 1 如上为一个简单的赋值语句 1就是对象 a就是引用 引用a指向对象1 同理 b 1 b也
  • Configuring VM Acceleration on Windows

    http developer android com tools devices emulator html Configuring Virtual Machine Acceleration Caution As of SDK Tools
  • Java中String类,StringBuffer类和StringBuilder类

    底层分析 1 String类 String类对象代表不可变的字符序列 其底层结构如下 public final class String implements java io Serializable Comparable
  • quartz定时任务详解

    开始 application quartz xml
  • 前端面试题总结

    1 this指向问题 1 以函数的形式 包括普通函数 定时器函数 立即执行函数 调用时 this 的指向永远都是 window 比如fun 相当于window fun 2 以方法的形式调用时 this 指向调用方法的那个对象 3 以构造函数
  • NTP协议介绍

    查看原作者 转载自 NTP协议介绍 2013 06 19 14 50 50 转载 SNTP协议原理 SNTP是简单网络时间协议 Simple Network Time protocol 的简称 它是目前Internet网上实现时间同步的一种
  • 【分布式】分布式事务:2PC

    分布式事务的问题可以分为两部分 并发控制 concurrency control 原子提交 atomic commit 分布式事务问题的产生场景 一份数据被分片存在多台服务器上 那么每次事务处理都涉及到了多台机器 可序列化 并发控制 定义了
  • HttpServer:一款Windows平台下基于IOCP模型的高并发轻量级web服务器

    HttpServer的特点 1 完全采用IOCP模型 实现真正的异步IO 高并发 高可靠 2 支持4G以上文件下载 3 支持断点续传 4 轻量级 体积小 服务器文件仅200多K 无任何依赖库 5 支持CGI网关 通过CGI xml可动态配置