C++ http服务
1.需要使用c++提供http服务,本来想使用libevent,但是经过一番搜索后,发现了只需要引用2个文件的mongoose库。
官方文档:https://cesanta.com/docs/overview/intro.html
官方代码:https://github.com/cesanta/mongoose
2.相关代码
#include "HttpService.h" struct mg_serve_http_opts HttpService::s_http_server_opts; //请求事件处理
void HttpService::mgEvHandler(struct mg_connection *nc, int ev, void *p) {
//处理request
if (ev == MG_EV_HTTP_REQUEST) {
struct http_message *msg = (struct http_message *)p; //body内容
char* body = new char[msg->body.len + ];
memset(body, , msg->body.len + );
memcpy(body, msg->body.p, msg->body.len); //uri内容
char* uri = new char[msg->uri.len + ];
memset(uri, , msg->uri.len + );
memcpy(uri, msg->uri.p, msg->uri.len); //返回body信息
mgSendBody(nc, "body content"); //返回下载文件
//mgSendFile("相对于s_http_server_opts.document_root的文件路径"); delete uri;
delete body;
}
} //发送body信息
void HttpService::mgSendBody(struct mg_connection *nc, const char *content) {
mg_send_head(nc, , strlen(content), "Content-Type: text/plain\r\nConnection: close");
mg_send(nc, content, strlen(content));
nc->flags |= MG_F_SEND_AND_CLOSE;
} //发送文件,文件的位置是相对于s_http_server_opts.document_root的路径
void HttpService::mgSendFile(struct mg_connection *nc, struct http_message *hm, const char* filePath) {
mg_http_serve_file(nc, hm, filePath, mg_mk_str("text/plain"), mg_mk_str(""));
} //初始化并启动
bool HttpService::start(const char *port) {
struct mg_mgr mgr;
struct mg_connection *nc; mg_mgr_init(&mgr, NULL);
printf("Starting web server on port %s\n", port);
nc = mg_bind(&mgr, port, mgEvHandler);
if (nc == NULL) {
printf("Failed to create listener\n");
return false;
} // Set up HTTP server parameters
mg_set_protocol_http_websocket(nc);
s_http_server_opts.document_root = "."; //文件相对路径 Serve current directory
s_http_server_opts.enable_directory_listing = "yes"; for (;;) {
mg_mgr_poll(&mgr, ); //1s轮训一次
}
mg_mgr_free(&mgr); return true;
}
3.vs2019项目工程文件下载:vs2019_HttpSvr.zip
以上。
C++ http服务的更多相关文章
- solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件
昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- 启动了VSAN服务的主机不在vCenter集群中
背景: 这个问题的来源是,某用户将该ESXi主机直接夺取到另一个vCenterA的管辖中,而这个vCenterA中集群A开启了VSAN功能,导致再次反向夺取到vCenterB中的时候带有了来自于集群A ...
- node服务的监控预警系统架构
需求背景 目前node端的服务逐渐成熟,在不少公司内部也开始承担业务处理或者视图渲染工作.不同于个人开发的简单服务器,企业级的node服务要求更为苛刻: 高稳定性.高可靠性.鲁棒性以及直观的监控和报警 ...
- 通过AngularJS实现前端与后台的数据对接(二)——服务(service,$http)篇
什么是服务? 服务提供了一种能在应用的整个生命周期内保持数据的方法,它能够在控制器之间进行通信,并且能保证数据的一致性. 服务是一个单例对象,在每个应用中只会被实例化一次(被$injector实例化) ...
- 本人提供微软系.NET技术顾问服务,欢迎企业咨询!
背景: 1:目前微软系.NET技术高端人才缺少. 2:企业很难直接招到高端技术人才. 3:本人提供.NET技术顾问,保障你的产品或项目在正确的技术方向. 技术顾问服务 硬服务项: 1:提供技术.决策. ...
- 使用 Roslyn 编译器服务
.NET Core和 .NET 4.6中 的C# 6/7 中的编译器Roslyn 一个重要的特性就是"Compiler as a Service",简单的讲,就是就是将编译器开放为 ...
- C#高性能TCP服务的多种实现方式
哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!>. 本篇文章的主 ...
- 使用ServiceStack构建Web服务
提到构建WebService服务,大家肯定第一个想到的是使用WCF,因为简单快捷嘛.首先要说明的是,本人对WCF不太了解,但是想快速建立一个WebService,于是看到了MSDN上的这一篇文章 Bu ...
- 关于如何提高Web服务端并发效率的异步编程技术
最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...
随机推荐
- Urllib 库使用
什么是Urllib Urllib是python内置的HTTP请求库包括以下模块urllib.request 请求模块 -->用来模拟发送请求 类似于输入网址敲击回车的过程urllib.er ...
- haproxy是什么以及作用?
HAProxy 是一款提供高可用性.负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费.快速并且可靠的一种解决方案. HAProxy特别适用于那些负载特大的we ...
- Linux学习笔记-第1天(补发)- 新的开始
本来不打算补发第一天的笔记,第一天讲的内容并不多,且大部分内容都是书本上已有的,就没有写多少笔记. 其实在学习的过程中我挺好奇其它同学各种千奇百怪的问题.想法是怎么来的,我怎么想不出来这些.或许这就是 ...
- linux-部署1
0.python安装 ubuntu16.04默认:安装了python2.7和python3.5: Ubuntu18.04默认:只有python3.6.8 下面是针对16.04: python/pyth ...
- vector的基本操作
vector怎么删除元素? #include<iostream> #include<vector> using namespace std; int main() { vect ...
- plsql安装
1.plsql都需要安装oracle的客户端,不过也可以安装瘦客户端,完整的客户端太大了,俗称胖客户端,一般瘦客户端就可以满足, 本人下载的是instantclient-basic-win32-11. ...
- Oracle 的 连接
select a.alert_id, b.alert_id from a inner join b on a.alert_id = b.alert_id ; 上面和下面是一样的,都是 内连接 sele ...
- App.vue 不触发 beforeRouteEnter
因为要在 router 对应一个路由的组件才可以触发 如果没有将 App.vue 作为某个路由组件(一般不会吧) 就不会触发该导航守卫 应该是想在每次进入应用时加载一些数据 所以放在 App.vue ...
- Visual Studio2017专业版和企业版密钥
Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF
- | C语言I作业12
C语言I作业12-学期总结 标签:18软件 李煦亮 问题 答案 这个作业属于那个课程 C语言程序设计I 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/S ...