-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
How does drogon reuse existed connections? #1998
Comments
目前drogon里的HttpClient,一个对象管理一个连接,断线会自动重连,请求结果在回调中返回不会阻塞当前进程,但是,该客户端是Http1.1标准,这意味着如果你一次发出多个请求,这些请求会先后到达服务端,可能不是你所说的复用。 |
感谢您回复,我的意思是每次调用client的时候,我希望知道该次调用是否重连(糟糕情况)或者是直接复用上次的连接成功(理想情况)。 因为重连的延迟对我来说要尽量避免,我会采取向服务端定时发送心跳的方式尽量维持这个连接不断。 另外,如果我创建一个httpclient池,里面的client host是一样的,drogon是会只创建一个连接吗? 我发现我现在使用EventLoopThreadPool GetNextLoop创建10个httpclient,并行处理10个http请求,他们立刻返回,但是回调函数收到数据据的延迟似乎是串行的,例如:(单位是微秒) 这个和我想要的并行请求似乎不符合,我希望,每个请求触发回调的时间都是30000 希望您赐教 |
每个client有自己得connection,你建10个client就应该有10个connection,他们共用1个loop也是并行发送请求的,从你描述的情况来看,说不定服务端是串行处理请求的,你可以贴一下代码,我帮你看看你写的对不对。 |
https://github.com/bethebest0622/http_client 主代码在lib_src/src/curl_tools.cpp里面 |
只需要看HttpClient的构造函数 和 async_execute这两个函数 |
没有你说的文件啊,master分支吗 |
https://github.com/bethebest0622/http_client/blob/master/lib_src/src/curl_util.cpp 请看这里 |
看着应该是异步的,服务端是你自己做的么 |
不是,服务端是 huobi 一个交易所服务器 |
你抓包看看,也许服务端串行化了;另外看看网络时延多少,估算下它处理请求花的时间; |
好的,另外,我调用send_request的时候可以知道 本次请求有没有重连吗 |
嗯,没有连接会重连,否则重用就连接 |
usually, i use HttpClient::newHttpClient as my client handler.
it it great, can reuse connections automatically.
but in my understanding, the tcp connections will be closed if long time no use.
so, how can i know if this request created connections or not (so that i can send heartbeat to keep alive)?
你好,drogon非常牛逼,本人原来使用curl,体验一言难尽。
我只使用客户端请求,并且非常在意http请求的延迟,所以我希望尽可能的保持连接被复用,并且请求函数不被阻塞
但是服务端有的时候会主动断开连接,这时候我希望我代码和日志中可以感知到连接断开,如何获取这一信息呢?
此外,我的场景,您是否有一些设置或者配置上的建议可以使之延迟更小,如果有,请不吝赐教,感谢
The text was updated successfully, but these errors were encountered: