libevent的使用

相关api:

1.// 启动libevent

event_base* m_base=NULL;

m_base = event_base_new();

2.创建http服务

evhttp* m_httpServer=NULL;

m_httpServer = evhttp_new(m_base);

3.绑定http服务的地址跟端口,可以重复调用,绑定多个端口

int ret = evhttp_bind_socket(m_httpServer, host, port);

4.设置回调,当http服务接收到请求的时候调用

void CGMThread::generic_handler(struct evhttp_request *req, void *arg);

evhttp_set_gencb(m_httpServer, &CGMThread::generic_handler, NULL);

5.回调处理,因为http服务是在另一个线程中,所以接收到请求,如果会修改数据,应该构造对象丢到逻辑线程里统一处理。

{

/** Returns the request URI */
const char *evhttp_request_get_uri(const struct evhttp_request *req);

获取输入数据,然后解析

// 获取http body,解析到json对象
evbuffer* bodyBuffer = evhttp_request_get_input_buffer(m_req);
size_t bodyLen = evbuffer_get_length(bodyBuffer);
unsigned char* body = evbuffer_pullup(bodyBuffer, bodyLen);

// 解析json
Json::Value reqJson(Json::objectValue);
Json::Reader reader;

if(!reader.parse((char*)data, (char*)data+datal, reqJson))

}

原文地址:https://www.cnblogs.com/moon-in-sky/p/4791069.html