Skip to content

pony5551/PnHttpSysServer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 

Repository files navigation

PnHttpSysServer

ms httpapi server with iocp 微软 httpapi 异步封装

为兼容之前的项目代码中参考并复制了大量mORMot的代码,只有核心部份重写了使用基于iocp的模型 另外感谢diocp群友菜根对本人基础知识的解惑

为什么重新封装? 使用中发现mORMot的httpapiserver存在线程阻塞的方法,如果超过服务器线程数的慢网速客户端不停地post数据到服务器端,或者不停下载服务器上的大一点的文件,就会严重拖慢服务器,甚至卡死服务器线程, 这个问题我向mORMot作者提出过,前且我修改过一个SynCrtSock.pas为THttpApiServer.Execute增加了一个系统的线程池(Winapi.Windows.QueueUserWorkItem)来作为工作线程,结果是THttpApiServer.Execute的线程不再会被阻塞并且整体性能提升1.5到2倍

后来发现系统管理的线程池中有很多不可控因素,比如线程的运行前与运行后的事件,绑定在QueueUserWorkItem时会不停地调用,但绑定在THttpApiServer时又与工作线程存在同步问题

之上列出的问题个人部结了一下,就有个现在的封装,基于iocp异步模式的http服务器

其性能较mORMot提升3-4倍

0.8a 第一版,代码较乱,比较粗糙

0.9a 整理了部份代码,并修正了一个request body接收完成时的bug

0.9.1a 把mormot的几个设置都移过来了,目前还有日志没有完善,还有线程事件没有增加

0.9.2a 增加w3c日志,增加异步的文件发送(基于mORMot的方法修改)

0.9.3a 修正文件缓存与大文件下载

0.9.4b 测试版,调整了启动日志的参数,整理了部分代码与注释微调响应静态文件

0.9.5b 增加OnCallWorkItemEvent事件,可以另开工作线程处理任务,另修正DoAfterResponse的出发位置,增加上传文件demo代码(文件块处理代码未完成)

0.9.6b 调整Start与Stop的代码,修正SendErr不存日志的问题

0.9.7b 优化日志写入,调整几出代码位置

0.9.8r 增加请求统计,优化应答数据处理,上线测试5天300万次用户请求无异常。

0.9.9r 修改对象池防止碎片严重的问题,上线测试近一个月无异常。

1.0.0.0r 修正io关闭时无法退出初始提交Request的问题。

1.0.0.1r 整理优化对象池文件

1.0.0.2r 整理文件,增加PnLibs库,去掉锁文件中的TQSimpleLock更换为TSpinLock

1.0.0.3r 调整使用CS锁,经测试win核心代码使用CS锁时平均效率较高与稳定

About

ms httpapi server with iocp http.sys

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages