2013-04-08 473 views
0

我的程序使用libcurl通过HTTPS与服务器通信(始终是同一个)。最简单的方法是始终为请求创建新的卷曲手柄。但通过这样做,我没有利用卷曲连接池/重用,如果我理解正确的话。从多个线程使用libcurl - 如何获得最佳性能?

创建一个curl句柄池是否有意义,以便任何给定的线程可以借用句柄,执行请求,然后将其放回池中?

如果答案是肯定的,那么一个相关的问题:给定一个curl句柄,如何找出是否对于一个新的请求它将重用该连接,或者将不得不创建一个新的请求(因此它不会意识到把它放回上面描述的场景池中)?

回答

2

如果因为没有libcurl API而需要重新使用连接,您无法弄清楚。

原因很简单,在判断这个决定时有很多因素,直到你要求转移发生 - 而且它仍然会失败,然后libcurl会(透明地)创建反正一个新的连接。

如果你真的必须使用多线程,那么我建议你分开一些你已经或已知的逻辑上的请求/线程,以便不同的线程处理不同的主机或类似的东西,以改善连接重用为每个句柄。

如果您可以考虑另一个选项,那么使用运行libcurl多接口的单个​​线程可以增加您对连接重用的更改。

+0

嗯,有趣(可能会接受这个答案后,思考它,现在只是upvoting)。我没有考虑使用多接口。 – rincewind 2013-04-09 05:08:36

+0

嗯,有趣的(可能接受这个答案后,思考它,现在只是upvoting)。我没有考虑使用多接口。事情虽然 - 我不控制我的代码被调用什么线程,虽然我可以产生额外的线程。基本上,我从FUSE(osxfuse,确切而言)回调中调用libcurl。现在(在浏览多接口教程之后),我没有看到它比使用一个libcurl句柄池更好,但正如我所说 - 需要更多地考虑它。谢谢! – rincewind 2013-04-09 05:15:19

相关问题