c++中的mongoose服务器
mongoose server in c++
我正在使用mongoose库在c++OOP中开发一个API服务器。我一直收到错误。有人可以查看我的代码并给我一些指针吗。embServer.h
class embServer
{
private:
constexpr static const char *s_http_port = "8000";
constexpr static struct mg_serve_http_opts s_http_server_opts = { .document_root = "web_root" }; // C99;
static int s_sig_num;
constexpr static const struct mg_str s_get_method = MG_MK_STR("GET");
constexpr static const struct mg_str s_put_method = MG_MK_STR("PUT");
constexpr static const struct mg_str s_delele_method = MG_MK_STR("DELETE");
public:
embServer();
~embServer();
Database dbConn;
//int embServer::s_sig_num = 0;
static void signal_handler(int sig_num)
{
signal(sig_num, signal_handler);
s_sig_num = sig_num;
}
static int has_prefix(const struct mg_str *uri, const struct mg_str *prefix)
{
return uri->len > prefix->len && memcmp(uri->p, prefix->p, prefix->len) == 0;
}
static int is_equal(const struct mg_str *s1, const struct mg_str *s2)
{
return s1->len == s2->len && memcmp(s1->p, s2->p, s2->len) == 0;
}
static void ev_handler(struct mg_connection *nc, int ev, void *ev_data)
{
static const struct mg_str api_prefix = MG_MK_STR("/api/v1");
struct http_message *hm = (struct http_message *) ev_data;
struct mg_str key;
switch (ev)
{
case MG_EV_HTTP_REQUEST:
if (has_prefix(&hm->uri, &api_prefix))
{
key.p = hm->uri.p + api_prefix.len;
key.len = hm->uri.len - api_prefix.len;
if (embServer::is_equal(&hm->method, &s_get_method))
{
//dbConn.db_op(nc, hm, &key, 1);
}
else if (embServer::is_equal(&hm->method, &s_put_method))
{
//dbConn.db_op(nc, hm, &key, 2);
}
else if (embServer::is_equal(&hm->method, &s_delele_method))
{
//dbConn.db_op(nc, hm, &key, 3);
}
else
{
mg_printf(nc, "%s","HTTP/1.0 501 Not Implementedrn" "Content-Length: 0rnrn");
}
}
else
{
mg_serve_http(nc, hm, &s_http_server_opts); /* Serve static content */
}
break;
default:
break;
}
}
void Run()
{
struct mg_mgr mgr;
struct mg_connection *nc;
//int i;
/* Open listening socket */
mg_mgr_init(&mgr, NULL);
nc = mg_bind(&mgr, s_http_port, embServer::ev_handler);
mg_set_protocol_http_websocket(nc);
/* For each new connection, execute ev_handler in a separate thread */
mg_enable_multithreading(nc);
/**
for (i = 1; i < argc; i++)
{
if (strcmp(argv[i], "-D") == 0)
{
mgr.hexdump_file = argv[++i];
}
else if (strcmp(argv[i], "-f") == 0)
{
s_db_path = argv[++i];
}
else if (strcmp(argv[i], "-r") == 0)
{
s_http_server_opts.document_root = argv[++i];
}
}
Parse command line arguments */
signal(SIGINT, &embServer::signal_handler);
signal(SIGTERM, &embServer::signal_handler);
/* Run event loop until signal is received */
printf("Starting RESTful server on port %sn", s_http_port);
while (s_sig_num == 0)
{
mg_mgr_poll(&mgr, 1000);
}
/* Cleanup */
mg_mgr_free(&mgr);
printf("Exiting on signal %dn", s_sig_num);
}
};
int embServer::s_sig_num = 0;
错误显示
`F:PROJECTSCPapiCrudembServer.h|48|warning: variable 'key' set but not used [-Wunused-but-set-variable]|
objDebugmain.o||In function `ZN9embServer10ev_handlerEP13mg_connectioniPv':|
F:PROJECTSCPapiCrudembServer.h|79|undefined reference to `embServer::s_http_server_opts'|
F:PROJECTSCPapiCrudembServer.h|79|undefined reference to `embServer::s_http_server_opts'|
F:PROJECTSCPapiCrudembServer.h|79|undefined reference to `embServer::s_http_server_opts'|
F:PROJECTSCPapiCrudembServer.h|79|undefined reference to `embServer::s_http_server_opts'|
F:PROJECTSCPapiCrudembServer.h|79|undefined reference to `embServer::s_http_server_opts'|
objDebugmain.o:F:PROJECTSCPapiCrudembServer.h|79|more undefined references to `embServer::s_http_server_opts' follow|
objDebugmain.o||In function `main':|
F:PROJECTSCPapiCrudmain.cpp|15|undefined reference to `embServer::embServer()'|
F:PROJECTSCPapiCrudmain.cpp|15|undefined reference to `embServer::~embServer()'|
F:PROJECTSCPapiCrudmain.cpp|15|undefined reference to `embServer::~embServer()'|
||error: ld returned 1 exit status|
||=== Build failed: 10 error(s),(0 minute(s), 22 second(s)) ===|`
int main(int argc, char *argv[])
{
embServer emb;
emb.Run();
return 0;
}
编译器直接告诉您需要进行以下更改:
- 将
constexpr
添加到static struct mg_serve_http_opts s_http_server_opts
- 从
mg_serve_http(nc, hm, &s_http_server_opts)
中移除&
相关文章:
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- 从服务器传输到客户端的消息不会出现
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- OpenSSL TLS服务器-使用客户端证书白名单
- 我正在开发服务器,ip作为参数传递不起作用
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- 如何在 Minecraft 服务器上执行命令
- 调试编译的服务器在数据库打开时崩溃
- 来自带有mbedtls TLS的Mongoose Web服务器的错误消息
- c++中的mongoose服务器
- 客户端身份验证或与Mongoose Web服务器的相互身份验证
- 使用 Mongoose 服务器在第二个线程中发送数据
- 在Mongoose服务器上强制下载
- 如何使用Mongoose(一个http服务器)来提供不同的请求
- 如何在mongoose服务器c++中获取域名
- Mongoose c++ Http服务器只获得MG_OPEN_FILE事件