libevent服务GET/POST的简单使用

1、前言


项目开发中经常需要使用到私有协议和Qt,Android等GUI前端通信,比较常用的使用POSTGET方式带出MESSAGE。实际使用中为了减少工作量和代码复用,经常使用到三方库,比较常用的服务有libevent或boost中的网络库、muduo, 也可自行写一套socket系统调用的二次封装, 当然这种方式不利于快速开发, 学习还是可以的。

这篇文章主要使用libevent库,因为是c写的, 所以掌握libevent非常重要。

  • POST请求比较常用, 特别是针对一些数据比较小的场景,比如控制相关, 业务相关的。当然传图片也可以,传输效果过低不推荐。
  • 针对传输二进制比较大的数据, 可以使用GET方式。

针对以上,这里简单使用http的POST和GET方法解决以上问题。
关联:libevent库,链接libevent 源码地址
jsoncpp的编译和使用参考我的这篇文章: 链接C++库libjsoncpp使用

2、测试demo

测试demo写的比较唐突,所以可能存在一些内存释放等BUG,因此如果向使用一下demo的程序开发,需要renew代码和多调试。


2.1、目录结构

event目录
	|-- libevent头文件
http_server.cpp
	|-- CHttpServer 功能类,里面带main的测试程序 
http_server.h
	|-- CHttpServer 接口
libevent.a
	|-- libevent库
libevent_core.a
	|-- libevent库
libevent_pthreads.a
	|-- libevent库

其中event目录是libevent编译后的头文件, *.a是libevent编译后的库静态文件,如果要链接动态库,请自行编译。

2.2、 测试源码

2.2.1、http_server.cpp

#include <unistd.h>

#include <iostream>
#include <string>
#include <memory>			//shared_ptr,unique_ptr .etc

#include "http_server.h"


CHttpServer::CHttpServer():base_(nullptr), http_(nullptr), serverloopThread_(nullptr),isExit_(true), sock_(nullptr)
{
	if(!serverloopThread_){
		serverloopThread_ = new std::thread(&CHttpServer::serverDispatch, this);
		if(!serverloopThread_){
			std::cout << "创建线程失败!" << std::endl;
		}
	}
}

CHttpServer::~CHttpServer()
{
	if(serverloopThread_){
		serverloopThread_->join();
		delete serverloopThread_; serverloopThread_ = nullptr;
	}
}


int CHttpServer::pic_video_test(struct evhttp_request *_req, const std::strin
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值