0

目前我正在开发一个嵌入猫鼬网络服务器的应用程序。在某些情况下,我必须在 中调用其他函数begin_request_handler来创建所需的 HTTP 标头。在此期间,我意识到这些函数是在请求处理程序完成后调用的。例如:

void test() {
    printf("HELLO");
}   

static int begin_request_handler(struct mg_connection *conn) {
    test();
    const struct mg_request_info *request_info = mg_get_request_info(conn);
    ...
    return 1;
}

在浏览器关闭 tcp 连接后,这里会立即打印 HELLO。有没有办法从回调内部调用函数?还是我只是错过了什么?

4

2 回答 2

0
  1. 如果要创建所需的 HTTP 标头。那么您上面提到的功能(begin_request_handler)可能不是正确的方法。查看结构mg_request_info中的字段结构mg_connection。这里设置了标题的名称和值。我认为这些结构是在连接建立后一开始就填充的。还要看pull()read()。这些是设置所有数据的地面功能。

  2. 是的,有一种方法可以从回调中调用函数。您可以编写自己的回调并使回调函数指向 struct ofmg_context以使其指向您的回调。然后在handle_request()你可以适当地调用它。您可以将其添加到struct mg_callbacksmongoose.h

例子:

memset(&callbacks, 0, sizeof(callbacks));
callbacks.begin_request => begin_request_handler;

// 将您的函数替换为 begin_request_handler
// 启动 Web 服务器。

ctx = mg_start(&callbacks, NULL, options);

请指定您可能感兴趣的更多详细信息。

于 2013-09-04T05:54:55.417 回答
0

嗯,明白了。我对标准输出中的 printf() 缓冲区感到困惑。这些方法在正确的时间被调用,但结果没有显示。还是谢谢。

于 2013-09-05T11:54:43.623 回答