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 服务器的基本流程。请注意,这仅是一个简单的例子,在实际使用中可能需要根据自己的需要进行更改。