mongoose 的 release 版本下载:https://github.com/cesanta/mongoose/releases
下面代码,只适用于mongoose 6.7及其以下版本,从6.8版本开始,不适用该方式创建多线程(使用的是 mg_socketpair 创建全双工的方式实现数据转发)。
#include "stdafx.h"
#include "mongoose-6.7/mongoose.h"
static const char *s_http_port = "7879";
static void ev_handler(struct mg_connection *c, int ev, void *p) {
if (ev == MG_EV_HTTP_REQUEST) {
struct http_message *hm = (struct http_message *) p;
char reply[100];
/* Simulate long calculation */
//sleep(3);
/* Send the reply */
snprintf(reply, sizeof(reply), "{ \"uri\": \"%.*s\" }\n", (int) hm->uri.len, hm->uri.p);
mg_printf(c, "HTTP/1.1 200 OK\r\n"
"Content-Type: application/json\r\n"
"Content-Length: %d\r\n"
"\r\n"
"%s",
(int) strlen(reply), reply);
}
}
int main(void) {
struct mg_mgr mgr;
mg_mgr_init(&mgr, NULL);
struct mg_connection *nc = mg_bind(&mgr, s_http_port, ev_handler);
mg_set_protocol_http_websocket(nc);
/* For each new connection, execute ev_handler in a separate thread */
mg_enable_multithreading(nc);//from v6.8, removed mg_enable_multithreading.
printf("starting multi-threaded server on port %s\n", s_http_port);
for (;;) {
mg_mgr_poll(&mgr, 500);
}
mg_mgr_free(&mgr);
return 0;
}
mongoose 多线程服务端示例程序下载:https://download.csdn.net/download/hellokandy/10957091