drogon icon indicating copy to clipboard operation
drogon copied to clipboard

有一些异步请求没有回调?

Open bethebest0622 opened this issue 1 year ago • 4 comments

我的调用方法如下: ptr_->sendRequest(req_ptr, [] (const drogon::ReqResult & rq, const drogon::HttpResponsePtr & hr) { printf("hb body = %s\n", hr->getBody().data()); }); etp_.start();

我的每一个httpclient对象都绑定一个EventLoop*对象,etp_是一个trantor::EventLoopThreadPool 对象

观察到的现象是: 这个client一开始是正常的,后来某一次不返回之后,后面使用这个client 都不返回了,似乎是这个EventLoop失效了,这种情况有没有办法检测到?

按理说hb body应该打印出来,说明请求被执行

99%的情况,请求是会被执行的

但是有一些情况,printf没有执行,我那里有一个计时器,长达30s没有回调,会报错退出,一天总有几次这种情况,您有任何看法和建议吗

bethebest0622 avatar Jul 20 '24 07:07 bethebest0622

HttpClient会维护一个http连接,我记不清连接断开后它会不会自动重连了,有些或者说多数服务端会限制一个连接上的请求总数,好的实践是计数到达之前重新创建一个client。每个请求都会有回调的,可以设置一个超时值,这样超时也会有回调,否则有时候网络错误是很滞后感知的。

an-tao avatar Jul 20 '24 15:07 an-tao

你应该设置timeout,http1.1只能收到响应以后才能发送下一个请求,可能是你上一个请求一直没收到响应

fantasy-peak avatar Jul 21 '24 23:07 fantasy-peak

你应该设置timeout,http1.1只能收到响应以后才能发送下一个请求,可能是你上一个请求一直没收到响应

请问一下 什么时候会出现一直没有响应呢?

bethebest0622 avatar Jul 22 '24 03:07 bethebest0622

你应该设置timeout,http1.1只能收到响应以后才能发送下一个请求,可能是你上一个请求一直没收到响应

请问一下 什么时候会出现一直没有响应呢?

这跟服务器有关,也许是服务器处理太慢了

fantasy-peak avatar Jul 22 '24 08:07 fantasy-peak