C++技术之路:Http服务器

本文探讨了在网络应用中常见的Http协议,并通过C++代码展示了如何使用mongoose库创建一个Http服务器。mongoose库以C语言编写,仅包含mongoose.c和mongoose.h两个文件,虽然简洁但功能齐全,适合快速实现Http服务器。
摘要由CSDN通过智能技术生成

对于网络应用,Tcp,Http,websocket是常用的几个协议,今天我们来讲讲HttpServer方面的应用。我们直接上代码,来看看我平时的应用。

头文件

#pragma once

#include <string>
#include <string.h>
#include <unordered_map>
#include <unordered_set>
#include <functional>
#include <utility>
#include <memory>
#include "mongoose.h"
#include <mutex>
#include <map>
// 定义http返回callback
typedef void OnRspCallback(mg_connection *c, std::string);
// 定义http请求handler
using ReqHandler = std::function<bool (unsigned int iSubHttpConID, std::string, std::string, mg_connection *c, OnRspCallback)>;

class GrockHttpServer
{
   
public:
	GrockHttpServer() {
   }
	~GrockHttpServer() {
   }

	void Init(const std::string &port); // 初始化设置
	bool Start(); // 启动httpserver
	bool Close(); // 关闭
	void AddHandler(const std::string &url, ReqHandler req_handler); // 注册事件处理函数
	void RemoveHandler(const std::string &url); // 移除时间处理函数
	static std::string s_web_dir; // 网页根目录 
	static mg_serve_http_opts s_server_option; // web服务器选项
	static std::unordered_map<std::string, ReqHandler> s_handler_map; // 回调函数映射表

	void SendRspMsg(mg_connection *connection, std::string rsp);

private:
	// 静态事件响应函数
	static void OnHttpWebsocketEvent(mg_connection *connection, int event_type, void *event_data);

	static void HandleHttpEvent(mg_connection *connection, http_message *http_req);
	static void SendHttpRsp(mg_connection *connection, std::string rsp);

	static int isWebsocket(const mg_connection *connection); // 判断是否是websoket类型连接
	static void HandleWebsocketMessage(mg_connection *connection, int event_type, websocket_message *ws_msg); 
	static void SendWebsocketMsg(mg_connection *connection, std::string msg); // 发送消息到指定连接
	static void BroadcastWebsocketMsg(std::string msg); // 给所有连接广播消息
	static std::unordered_set<mg_connection *> s_websocket_session_set; // 缓存websocket连接

	std::string m_port;    // 端口
	mg_mgr m_mgr;          // 连接管理器
};

class CGrockHttpSsMg
{
   
public:
	CGrockHttpSsMg() {
    m_HttpServer = std::shared_ptr<GrockHttpServer>(new GrockHttpServer); }
	static CGrockHttpSsMg&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值