我想创建一个 c++ 网络服务器,它将为登陆我网站的每个用户执行一项任务。由于任务可能计算量很大(现在只是长时间的睡眠),我想在不同的线程上处理每个用户。我正在使用猫鼬来设置网络服务器。
不同的进程(在我的代码中只有一个,又名 server1)设置正确并且似乎运行正常。但是,线程似乎一个接一个地排队,所以如果 2 个用户到达终点,第二个用户必须等到第一个用户完成。我错过了什么?线程是否超出范围?是否有我应该使用的“线程管理器”?
#include "../../mongoose.h"
#include <unistd.h>
#include <iostream>
#include <stdlib.h>
#include <thread>
//what happens whenever someone lands on an endpoint
void myEvent(struct mg_connection *conn){
//long delay...
std::thread mythread(usleep, 2*5000000);
mythread.join();
mg_send_header(conn, "Content-Type", "text/plain");
mg_printf_data(conn, "This is a reply from server instance # %s",
(char *) conn->server_param);
}
static int ev_handler(struct mg_connection *conn, enum mg_event ev) {
if (ev == MG_REQUEST) {
myEvent(conn);
return MG_TRUE;
} else if (ev == MG_AUTH) {
return MG_TRUE;
} else {
return MG_FALSE;
}
}
static void *serve(void *server) {
for (;;) mg_poll_server((struct mg_server *) server, 1000);
return NULL;
}
int main(void) {
struct mg_server *server1;
server1 = mg_create_server((void *) "1", ev_handler);
mg_set_option(server1, "listening_port", "8080");
mg_start_thread(serve, server1);
getchar();
return 0;
}