当前位置: 首页 > news >正文

C++-Mongoose(1)-http-server


 Mongoose is a network library for C/C++. It implements event-driven non-blocking APIs for TCP, UDP, HTTP, WebSocket, MQTT. 
mongoose很小巧,只有两个文件mongoose.h/cpp,拿来就可以用.

下载地址:

https://github.com/cesanta/mongoose

1.simplest http server
2.restful server
3.simplest https server
4.multi-thread server
 

1.simplest http server
 

Mongoose有两个基本的结构体:

  • struct mg_mgr 事件管理器,管理所有激活的连接

  • struct mg_connection 单个连接描述结构

下面的示例代码创建了一个web server,事件处理函数fn中实现了三个简单的能力,一个显示根目录文件列表、一个显示hello Mongoose的html页面、一个简单的post请求计算两个数之和。
 

1.1代码
 

static void fn(struct mg_connection* c, int ev, void* ev_data, void* fn_data)
{//MG_EV_HTTP_MSG表示为http请求if (ev == MG_EV_HTTP_MSG) {struct mg_http_message* hm = (struct mg_http_message*)ev_data;//1.get请求示例,显示Hello Mongoose页面if (mg_http_match_uri(hm, "/hello")) {mg_http_reply(c, 200, "", "<html><head><title>mongoose demo</title></head><body><h1>Hello Mongoose!</h1></body></html>\n");}//2.post请求示例,请求体json示例{"a":10,"b":20},计算a+b的值else if (mg_http_match_uri(hm, "/api/sum")) {double a = 0;double b = 0;mg_json_get_num(hm->body, "$.a", &a);mg_json_get_num(hm->body, "$.b", &b);double sum = a + b;mg_http_reply(c, 200, "Content-Type: application/json\r\n", "{\"result\":%lf}", sum);}//3.显示当前目录文件列表else {struct mg_http_serve_opts opts = { 0 };opts.root_dir = ".";mg_http_serve_dir(c, hm, &opts);}}
}void main()
{//1.创建事件管理器struct mg_mgr mgr;//设置日志级别为DEBUG,如果不做设置,默认情况下运行程序控制台不打印任何请求响应消息mg_log_set(MG_LL_DEBUG);//2.初始化事件管理器mg_mgr_init(&mgr);//3.创建http监听mg_http_listen(&mgr, "http://127.0.0.1:8080", fn, NULL);//4.开启事件循环for (;;){// 1000ms为超时时长mg_mgr_poll(&mgr, 1000);}mg_mgr_free(&mgr);
}


1.2测试

 启动httpserver 程序
1.2.1  浏览器访问:http://127.0.0.1:8080:
         将显示exe程序根目录文件列表
1.2.2  浏览器访问: http://127.0.0.1:8080/hello:
          将显示Hello Mongoose
1.2.3 使用postman: 发送post请求:
          http://127.0.0.1:8080/api/sum,
          请求json参数为{"a": 100, "b": 2},

相关文章:

C++-Mongoose(1)-http-server

Mongoose is a network library for C/C. It implements event-driven non-blocking APIs for TCP, UDP, HTTP, WebSocket, MQTT. mongoose很小巧&#xff0c;只有两个文件mongoose.h/cpp&#xff0c;拿来就可以用. 下载地址&#xff1a; https://github.com/cesanta/mongoo…...

Linux中openvswitch配置网桥详解

以下是对给出的命令进行逐行解释和注释&#xff1a; # 安装openvswitch软件包&#xff0c;并自动确认所有提示信息使用默认值&#xff08;-y参数&#xff09; dnf install openvswitch -y# 启动openvswitch服务 systemctl start openvswitch# 设置openvswitch服务开机启动 sys…...

Python自动化测试框架pytest的详解安装与运行

这篇文章主要为大家介绍了Python自动化测试框架pytest的简介以及安装与运行&#xff0c;有需要的朋友可以借鉴参考下希望能够有所帮助&#xff0c;祝大家多多进步 1. pytest的介绍 pytest是一个非常成熟的全功能的python测试工具&#xff0c;它主要有以下特征&#xff1a; 简…...

23种设计模式详解

设计模式的分类 总体来说设计模式分为三大类&#xff1a; 创建型模式&#xff0c;共五种&#xff1a;工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式&#xff0c;共七种&#xff1a;适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模…...

微信小程序案例:2-2本地生活

文章目录 一、实现步骤&#xff08;一&#xff09;创建项目&#xff08;二&#xff09;创建页面&#xff08;三&#xff09;准备图片素材&#xff08;四&#xff09;编写页面结构1、编写轮播区域页面结构2、编写九宫格区域页面结构 &#xff08;五&#xff09;编写页面样式1、编…...

机器学习论文中常用的数学符号以及Latex

A数据集&#xff1a;通常用 D A \mathcal{D}_A DA​表示。 B数据集&#xff1a;通常用 D B \mathcal{D}_B DB​表示。 C数据集&#xff1a;通常用 D C \mathcal{D}_C DC​表示。 在机器学习中&#xff0c;损失函数通常用 L L L表示&#xff0c;即&#xff1a; L ( θ , D ) …...

【iOS】Fastlane一键打包上传到TestFlight、蒲公英

Fastlane一键打包上传到TestFlight、蒲公英 前言一、准备二、探索一、Fastlane配置1、Fastlane安装2、Fastlane更新3、Fastlane卸载4、查看Fastlane版本5、查看Fastlane位置6、Fastlane初始化 二、Fastlane安装蒲公英插件三、Fastlane文件编辑1、Gemfile文件2、Appfile文件3、F…...

绝地求生大吃鸡攻略,让你成为顶级战士!

近年来&#xff0c;绝地求生越来越受到玩家们的喜爱&#xff0c;吃鸡成为了很多人的娱乐方式。作为一个资深吃鸡玩家&#xff0c;今天我要和大家分享一些提高战斗力的干货&#xff0c;以及一些方便吃鸡作图与查询的实用工具。 首先&#xff0c;提高战斗力是吃鸡游戏中最重要的一…...

[架构之路-235]:目标系统 - 纵向分层 - 数据库 - 数据库系统基础与概述(快速入门、了解核心概念):概念模型、逻辑模型、物理模型

目录 一、核心概念 1.1 什么是数据与信息 1.2 数据与数据库的关系 1.3 什么是数据库 1.4 数据库中的数据的特点 1.5 数据库与数据结构的关系 1.6 什么是数据库管理系统 1.7 什么是数据库系统 1.8 数据库的主要功能 1.9 Excel表格是数据库吗&#xff1f; 1.10 Excel表…...

小程序, 多选项

小程序, 多选项 <view class"my-filter-btnwrap"><block wx:for"{{archiveList}}" wx:key"index"><view class"my-filter-btnitem text-ellipsis {{item.checked ? active : }}" data-index"{{index}}" wx…...

华为云云耀云服务器L实例评测|使用redis事务和lua脚本

文章目录 云服务器的类型云服务优点redis一&#xff0c;关系型数据库&#xff08;sqlserver&#xff0c;mysql&#xff0c;oracle&#xff09;的事务隔离机制说明&#xff1a;redis事务机制 lualua脚本好处&#xff1a;一&#xff0c;怎么在redis中使用lua脚本二&#xff0c;脚…...

vue2项目中使用element ui组件库的table,制作表格,改表格的背景颜色为透明的

el-table背景颜色变成透明_el-table背景透明_讲礼貌的博客-CSDN博客 之前是白色的&#xff0c;现在变透明了&#xff0c;背景颜色是蓝色...

C#报错 功能“结构字段初始化表达式“在C#7.3中不可用。请使用10.0或更高的语言版本。

解决方式&#xff1a; 打开以下文件 增加 <LangVersion>10.0</LangVersion>...

servlet基础知识

目录 什么是servlet概念/定义作用 servlet容器概念/是什么作用如何配置和管理 servlet生命周期有哪些生命周期每个周期中可以执行哪些操作 创建和编写servlet如何创建一个简单的servletservlet类的结构是什么样的如何处理HTTP请求和响应 servlet映射和URL模式什么是servlet映射…...

使用poi-tl循环导出word报表

先看模板和导出的效果 模板 效果 根据模板循环生成表格&#xff0c;每个表格再循环填充数据&#xff0c;也就是两层循环&#xff0c;第一层循环是学生学期信息&#xff0c;第二层循环是学生的成绩数据。 第一个循环 {{?listTable}} {{/}}第二个循环 {{reportList}} 表格…...

PyCharm搭建Scrapy环境

Scrapy入门 1、Scrapy概述2、PyCharm搭建Scrapy环境3、Scrapy使用四部曲4、Scrapy入门案例4.1、明确目标4.2、制作爬虫4.3、存储数据4.4、运行爬虫 1、Scrapy概述 Scrapy是一个由Python语言开发的适用爬取网站数据、提取结构性数据的Web应用程序框架。主要用于数据挖掘、信息处…...

TensorFlow的transformer类模型文件转换为pytorch

在进行transformer类模型的训练或开发时&#xff0c;我们会在GitHub、huggingface等平台上下载已有的模型文件。个人习惯用pytorch框架进行代码编写&#xff0c;然而很多时候在下载模型文件时&#xff0c;会遇到TensorFlow的模型&#xff0c;这是就涉及到转换的问题。 首先说一…...

C++学习之指针和数组

指针和一维数组 一个数组包含若干元素&#xff0c;每个数组元素都在内存中占用存储单元&#xff0c;它们都有相应的地址。指针变量既可以指向变量&#xff0c;当然也可以指向数组元素。所谓数组元素的指针就是数组元素的地址。 eg&#xff1a; int a[6]; //定义一个整数数组a…...

什么是站内搜索引擎?如何在网站中加入站内搜索功能?

在当今数字时代&#xff0c;用户体验对于网站的成功起着至关重要的作用。提升用户体验和改善整体网站性能的一种方法是引入站内搜索引擎。站内搜索引擎是一种强大的工具&#xff0c;它的功能类似于Google或Bing等流行搜索引擎&#xff0c;但它专注于实施自己网站上的内容。用户…...

【C++】面向对象编程(六)在派生类中定义一个虚函数、虚函数的静态解析

在派生类中定义一个虚函数 定义派生类时&#xff1a; 将基类中的虚函数覆盖掉&#xff1a;派生类提供新定义&#xff0c;所声明的函数原型必须完全符合基类所声明的函数原型&#xff08;包括&#xff1a;参数列表、返回类型、常量性&#xff09;&#xff1b;原封不动继承基类…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...