【发布时间】:2019-12-02 20:26:15
【问题描述】:
我在使用 Cesanta Mongoose Web 服务器库构建 HTTP 服务器时遇到问题。当我有一个构建用于侦听端口 8080 的 HTTP 服务器以及一个向 localhost:8080 发送 HTTP 请求的客户端时,就会出现我遇到的问题。问题是服务器很好地处理了请求并发回了响应,但客户端仅在我终止服务器进程后处理并打印响应。基本上,Mongoose 可以在您创建连接时使用 事件处理程序 函数 ev_handler()。每当有 “事件”发生,例如收到请求或回复。在服务端,在8080收到客户端的请求时,事件处理函数被正常调用。但是,响应发送回复时,客户端事件处理函数没有被调用,而是在服务端进程之后才被调用被杀。我怀疑这可能与连接在 localhost 上的事实有关,我是对的 - 当客户端将请求发送到 localhost 以外的地址时,不会发生此问题。事件处理函数调用正常。这里是客户端的ev_handler函数供参考:
static void ev_handler(struct mg_connection *c, int ev, void *p) {
if (ev == MG_EV_HTTP_REPLY) {
struct http_message *hm = (struct http_message *)p;
c->flags |= MG_F_CLOSE_IMMEDIATELY;
fwrite(hm->message.p, 1, (int)hm->message.len, stdout);
putchar('\n');
exit_flag = 1;
} else if (ev == MG_EV_CLOSE) {
exit_flag = 1;
};
}
当尝试在 localhost 上与同一台计算机上的服务器建立连接时,这是一个常见问题吗?
【问题讨论】:
-
当您尝试其他客户端(例如普通浏览器)时会发生什么?
标签: c++ http https network-programming mongoose-web-server