关于libevent搭建httpserver 的问题

Http server 中有个函数evhttp_set_timeout 设置超时时间,什么情况会触发这个超时时间,如果触发了,会回调哪个函数,我怎么设置这个超时回调

evhttp_set_timeout 函数用于设置 HTTP 请求的超时时间。在指定的超时时间内,如果请求还没有完成,就会触发超时事件。超时事件会调用回调函数。

你可以使用 evhttp_set_gencb 函数设置回调函数。这个函数有两个参数:一个 struct evhttp_request * 类型的指针,表示请求对象,另一个是一个回调函数,它是一个指向 void (*)(struct evhttp_request *, void *) 类型的函数指针。

你可以使用下面的代码设置回调函数:

void timeout_cb(struct evhttp_request *req, void *arg) {
  // 超时处理代码
}

...

evhttp_set_gencb(http_server, timeout_cb, NULL);


在超时时间到达时,将会调用 timeout_cb 函数。可以在这个回调函数中执行超时处理逻辑。

evhttp_set_timeout 是用于设置请求的超时时间的,触发的条件是:当发送请求时,如果在设置的超时时间内,请求没有收到服务器的应答,比如网络原因,这么做的原因是,防止由于请求没有得到响应,导致长时间一直再等待响应。 超时后那么就会触发请求超时的函数,这个函数的作用就是,当发送超时时,你可以在这个函数里面进行处理,比如重新发送请求或者弹出超时提示等。

设置HTTP请求超时处理时间,60秒
 evhttp_set_timeout(m_http, 60);
   设置请求超时的处理函数
   evhttp_set_gencb(httpd,http_handler, NULL);
   evhttp_free(httpd);

  //超时响应处理的函数体
  void http_handler(struct evhttp_request*req, void *arg){

}

望采纳哦!!!!!

题主,这是我之前的写的一个例子,简单看下你就明白了。

  //设置请求超时时间(s)
    evhttp_set_timeout(http_server,5);
    //设置事件处理函数,evhttp_set_cb针对每一个事件(请求)注册一个处理函数,
    //区别于evhttp_set_gencb函数,是对所有请求设置一个统一的处理函数
    evhttp_set_cb(http_server,"/hello/post",Test_Post,NULL);
    evhttp_set_cb(http_server,"/hello/get",Test_Get,NULL);


Libevent 是一个事件处理库,可以用来构建 HTTP 服务器。如果您想要使用 Libevent 搭建 HTTP 服务器,可以尝试以下步骤:

安装 Libevent。在开始使用 Libevent 之前,需要先将其安装到系统中。可以使用以下命令在 Linux 系统上安装 Libevent:

sudo apt-get install libevent-dev

创建 HTTP 服务器。使用 Libevent 时,需要先创建一个 HTTP 服务器对象。可以使用 event_base_new() 函数创建一个新的事件基础,然后使用 evhttp_new() 函数创建 HTTP 服务器对象。

绑定端口。使用 evhttp_bind_socket() 函数可以将 HTTP 服务器绑定到指定的端口上。

设置请求处理回调函数。在 Libevent 中,可以使用回调函数来处理 HTTP 请求。可以使用 evhttp_set_gencb() 函数设置回调函数,该函数将在收到 HTTP 请求时被调用。

启动事件循环。使用 event_base_dispatch() 函数可以启动事件循环,使 HTTP 服务器开始处理请求。

以上步骤是搭建基于 Libevent 的 HTTP 服务器的基本流程。请注意,这仅是一个简单的例子,在实际使用中可能需要根据自己的需要进行更改。

借鉴下
https://blog.csdn.net/M_X_T/article/details/120162364