gpt4 book ai didi

c++ - 当两个以上的下载已经在进行中时,HttpSendRequest 阻塞

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:18 26 4
gpt4 key购买 nike

在我们的程序中,每次需要进行 HTTP 请求时都会创建一个新线程,并且可以同时运行多个线程。我遇到的问题是,如果我已经有两个线程在运行,它们在调用 HttpSendRequest() 之后循环读取 InternetReadFile(),任何后续尝试调用 HttpSendRequest() 只是卡在那个调用上,所以我最终得到前面提到的两个线程继续从它们的连接中读取就好了,但第三个只是阻塞 HttpSendRequest() 直到超时。

根据我自己的发现,这似乎就是 wininet 的工作方式,如 the HTTP spec建议:“单用户客户端不应与任何服务器或代理保持超过 2 个连接。”

我见过各种程序处理同时向同一服务器的多个下载,但我想他们需要做很多额外的工作才能做到这一点,在管理各种连接或编写自己的 http 接口(interface)方面.

如果将其设置为处理两个以上的事件 session 需要大量额外的复杂性,那么我只需将其更改为一次仅处理一个或两个文件,让其余文件排队。但是,如果有一些低复杂度的方法可以一次允许超过两个(在我的脑海中,我猜想每次下载使用一个新进程可能会起作用,但会更困惑),那将是更可取的;无论如何,它不会同时下载超过 3-5 个,而且每次下载都是应用户的请求。我读到一些关于注册表黑客更改限制的提及,但这绝对不是我会做的事情。有什么想法吗?

最佳答案

HTTP 1.1 标准要求每台服务器最多同时连接 2 个。如果您安装了 IE5、IE6 或 IE7,则它们安装的 WinInet 版本允许您使用 InternetSetOption() 来增加限制(查看 INTERNET_OPTION_MAX_CONNS_PER_SERVER 和 INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER 选项)。但是,与 IE8 一起安装的 WinInet 版本显然禁用了该功能(请参阅 http://connect.microsoft.com/WNDP/feedback/ViewFeedback.aspx?FeedbackID=434396http://connect.microsoft.com/WNDP/feedback/ViewFeedback.aspx?FeedbackID=481485)。

关于c++ - 当两个以上的下载已经在进行中时,HttpSendRequest 阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1683540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com