2024-11-23 07:27:04
介绍
基于mongoose 7.3版本的源码,经过二次封装和修改,WHttpServer是一个高性能的C++开源HTTP服务框架。该框架支持Linux操作系统,macOS系统下需要自行适配库,暂时未验证在Windows系统下的运行情况。用户可以通过查看示例文件(HttpExample.cpp、HttpExample.h和main.cpp)来了解如何在普通接口、大文件上传、大文件下载、chunk流文件下载等场景中使用。
运行操作系统
WHttpServer适用于Linux操作系统。在macOS系统上可以运行,但需要修改CMakeLists.txt文件以适配openssl库。Windows系统理论上可以运行,但因无测试支持,暂不推荐。
安装教程
将whttp-server-core目录下的文件复制到您的项目中即可完成安装。
接口说明
以下是WHttpServer提供的接口及其功能:
bool init(int maxEventThreadNum): 初始化线程池,设置最大线程数。
bool startHttp(int port): 开启HTTP服务,指定端口号。
bool startHttps(int port, string certPath, string keyPath): 开启HTTPS服务,指定端口号和证书路径。
bool stop(): 停止HTTP和HTTPS服务。
bool run(): 服务运行的核心函数,需要外部循环调用。
bool isRunning(): 检查服务是否正在运行。
void addHttpApi(const string &uri, HttpCbFun fun, int httpMethods): 添加普通的HTTP回调接口,通过不同的httpMethods设置HTTP方法。
void addChunkHttpApi(const string &uri, HttpCbFun fun, int httpMethods): 为可能超过3M大小的文件上传场景添加数据块HTTP回调接口。
void setHttpFilter(HttpFilterFun filter): 设置HTTP接口的过滤函数,用于过滤不符合条件的请求。
void forceCloseHttpConnection(shared_ptr httpMsg): 强制关闭与客户端的连接。
void addSendMsgToQueue(shared_ptr httpMsg, const char* data, int len): 向客户端发送数据,先放入缓冲区,等待下次循环发送。
void addSendMsgToQueue(shared_ptr httpMsg, string *sendMsg): 与上一个函数的字符串版本。
void httpReplyJson(shared_ptr httpMsg, int httpCode, string head, string body): 向客户端发送JSON格式的响应。
string formJsonBody(int code, string message): 生成JSON字符串。
bool isClientDisconnect(shared_ptr httpMsg): 检查客户端是否主动断开连接。
shared_ptr deQueueHttpChunk(shared_ptr httpMsg): 处理大文件上传时的块数据。
bool addStaticWebDir(const string &dir, const string &header = ""): 添加静态网页目录接口。
mg_http_status_code_str(int status_code): 返回HTTP状态码对应的字符串。
重要数据类型
提供以下两个数据类型:
using HttpCbFun = std::function &);: HTTP接口回调函数的类型。
using HttpFilterFun = std::function &): HTTP接口过滤函数的类型。
注意事项
所有HTTP回调函数在子线程中运行,同一回调可能在不同线程中运行,注意线程安全。
run函数内部未加锁,非线程安全,初始化和启动服务的函数调用应在run之前。
添加HTTP接口时,uri应避免重复匹配,否则只执行最后一个匹配的接口。建议直接使用'/'作为uri开头。
示例代码
初始化代码示例。
在main函数中启动服务的示例代码。
HTTP接口回调的示例代码。