用libevent实现httpserver
来源:互联网 发布:koala for mac 编辑:程序博客网 时间:2024/06/05 04:38
最近工作中需要实现一些审计功能,软件是服务器端程序,对于展示来说,在浏览器上能直接查看可能是最直接最友好的方式了,libevent中提供了http模块,正好我们的软件也依赖这个,所以决定用它来实现一个httpserver,用来展示相关数据。不多说,直接上代码表示这个工作流程
#include <event2/event.h>
#include <event2/buffer.h>
#include <event2/http.h>
bool startHttpServer(const char* ip, int port, void (*cb)(struct evhttp_request *, void *), void *arg)
{
//创建event_base和evhttp
event_base* base = event_base_new();
evhttp* http_server = evhttp_new(base);
if (!http_server) {
return false;
}
//绑定到指定地址上
int ret = evhttp_bind_socket(http_server, ip, port & 0xFFFF);
if (ret != 0) {
return false;
}
//设置事件处理函数
evhttp_set_gencb(http_server, cb, arg);
//启动事件循环,当有http请求的时候会调用指定的回调
event_base_dispatch(base);
evhttp_free(http_server);
return true;
}
void MyHttpServerHandler(struct evhttp_request* req, void* arg)
{
//创建要使用的buffer对象
evbuffer* buf = evbuffer_new();
if (!buf) {
return;
}
//获取请求的URI
const char* uri = (char*)evhttp_request_get_uri(req);
//添加对应的HTTP代码
evbuffer_add_printf(buf,"<html>");
evbuffer_add_printf(buf,"<head><title>MyHttpServer</title></head>");
evbuffer_add_printf(buf, "<body>");
//根据URI显示不同的页面
if (strcmp(uri, "/") == 0) {
evbuffer_add_printf(buf,"<p>Welcome to my http server</p>");
} else if (strcmp(uri, "/about") == 0) {
evbuffer_add_printf(buf,"<p>I love C++</p>");
}
evbuffer_add_printf(buf, "</body>");
evbuffer_add_printf(buf,"</html>");
//回复给客户端
evhttp_send_reply(req, HTTP_OK, "OK", buf);
evbuffer_free(buf);
}
int main(int argc, char** argv)
{
//Windows 平台套接字库的初始化
#ifdef WIN32
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
#endif
//启动服务在地址 127.0.0.1:9000 上
startHttpServer("127.0.0.1", 9000, MyHttpServerHandler, NULL);
#ifdef WIN32
WSACleanup();
#endif
return 0;
}
好了,编译运行:
再看看about的页面
一个简单的httpserver就这样实现了,当然这里只是简单描述了这个工作流程,实际项目中还是根据不同的需求来实现不同的页面输出的。
0 0
- 用libevent实现httpserver
- libevent 构造httpServer
- libevent写httpserver
- netty 简单httpserver实现
- Java HttpServer实现交互
- 内置jetty实现Httpserver
- httpserver C实现
- Apache Core实现HTTPServer
- 用Python3创建httpServer
- libevent(2) : 用libevent改写server端 实现echo_server
- HttpServer
- httpserver
- python3实现的多线程httpserver
- HttpServer的简单实现_Java
- android端HttpServer的实现
- 在Android上实现HttpServer
- 在Android上实现HttpServer
- 在Android上实现HttpServer
- easyui--datetimebox插件,下拉框的日期不能全部显示,即一个月份中的天数未全部显示
- 【爬虫-反爬虫】系列一:基础之概述(1)
- Unity3d使用心得(2):Unity3d 动态下载动画资源——AnimationClip 的使用
- Android5.x之RecyclerView使用(5)网格布局
- leetcode Median Of Two Sorted Arrays
- 用libevent实现httpserver
- 如何排查并解决SEAndroid 的审计不通过
- 【leetcode】278. First Bad Version
- Android架构实例分析之编写hello驱动的HAL层代码
- 切换场景的动画
- Just a Html
- 时间空间
- 小数值1.5625的二进制表示是?----阿里巴巴2015实习生笔试题
- django render和render_to_response()