一、编译并安装libevent
这里编译好了,版本libevent2.0
网盘链接:[Link]
提取码:gnu8
二、配置环境
1、附加包含目录
右键项目 - 属性 - C/C++ - 常规 - 附加包含目录
2、附加库目录
右键项目 - 属性 - 链接器 - 常规 - 附加库目录
3、附加依赖项
右键项目 - 属性 - 链接器 - 输入 - 附加依赖项
Iphlpapi.lib
wsock32.lib
ws2_32.lib
event.lib
event_core.lib
event_extra.lib
三、测试代码
Server.h
#pragma once
#ifndef SERVER_H
#define SERVER_H
class Server
{
public:
explicit Server();
~Server();
public:
// 开启服务器
void start();
};
void api_info(struct evhttp_request* req, void* arg);
#endif
Server.cpp
#include "Server.h"
#pragma comment(lib, "ws2_32.lib")
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <iostream>
#include <thread>
#include <ctime>
#include <event2/event.h>
#include <event2/http.h>
#include <event2/buffer.h>
#include <event2/http_struct.h>
using namespace std;
Server::Server()
{
WSADATA wdSockMsg;
int s = WSAStartup(MAKEWORD(2, 2), &wdSockMsg);
if (0 != s)
{
switch (s)
{
case WSASYSNOTREADY: printf("重启电脑,或者检查网络库"); break;
case WSAVERNOTSUPPORTED: printf("请更新网络库"); break;
case WSAEINPROGRESS: printf("请重新启动"); break;
case WSAEPROCLIM: printf("请关闭不必要的软件,以确保有足够的网络资源"); break;
}
}
if (2 != HIBYTE(wdSockMsg.wVersion) || 2 != LOBYTE(wdSockMsg.wVersion))
{
return;
}
}
Server::~Server() {}
// 开启服务器
void Server::start() {
cout << "执行start()!" << endl;
event_config* evt_config = event_config_new();
struct event_base* base = event_base_new_with_config(evt_config);
struct evhttp* http = evhttp_new(base);
evhttp_set_default_content_type(http, "text/html; charset=utf-8");
evhttp_set_timeout(http, 30);
// 设置路由
evhttp_set_cb(http, "/api_info", api_info, nullptr);
// 设置 ip 和 port
evhttp_bind_socket(http, "127.0.0.1", 9001);
//开启循环
event_base_dispatch(base);
//销毁资源
event_base_free(base);
evhttp_free(http);
event_config_free(evt_config);
}
void api_info(struct evhttp_request* req, void* arg) {
cout << "-----api_info----- "<< endl;
//固定写法
struct evbuffer* buff = evbuffer_new();
evbuffer_add_printf(buff, "%s", "return"); //要返回的值”return“
evhttp_send_reply(req, HTTP_OK, nullptr, buff);
evbuffer_free(buff);
}
main.cpp
#include"Server.h"
int main()
{
Server server;
server.start();
}
四、测试结果
- 打开浏览器 -
http://127.0.0.1:9001/api_info
- 运行结果打印:
-----api_info-----
,且返回"return",说明接口设置完成。