- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我们的程序中,每次需要进行 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=434396 和 http://connect.microsoft.com/WNDP/feedback/ViewFeedback.aspx?FeedbackID=481485)。
关于c++ - 当两个以上的下载已经在进行中时,HttpSendRequest 阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1683540/
我正在使用 WinInet 向 apache 网络服务器发出一个简单的 POST 请求。我使用 base 64 对数据进行编码。问题是,每个 + 字符都被空格字符替换。 为什么会这样,我怎样才能发出正
在这段代码中,我从网站获取一个字符串并将其显示在标签上。在标签上显示字符串真的很慢!大约 10 秒。但是在控制台 println (date) 上打印字符串时是立即的。我该如何解决这个问题?
我的应用程序中的 HTTP 请求出现问题,如果远程文件与本地文件大小相同(即使其修改时间不同,因为其内容已更改),尝试下载它很快返回并且没有下载较新的文件。 简而言之,我遵循的过程是:使用 INTER
我必须使用 delphi 将文件发送到 php 脚本。我最终选择使用 Wininet 函数,因为我必须通过 NTLM 身份验证代理。 当我发送文件时,我的内容请求的每个字符之间有空字符(00): PO
我有一个小程序可以将文件上传到服务器。出于测试目的,我使用了我自己的由 WebAmp 软件创建的本地服务器。我的程序将使用 PHP 脚本上传文件,该脚本将从程序中接受文件并将它们存储到指定位置的服务器
我创建了一个 Win32 服务,它使用 WinInet 向远程主机发送 HTTP 请求。在我的计算机 (WinXP SP2) 上,在我们的 QoS 团队 (Win2003 Server) 的测试工作站
在连接到 REST 服务时,使用 InternetSetOption 设置用户名 和密码。我注意到当我调用 HttpSentRequest 时 WinInet 不发送 Authorization he
在我们的程序中,每次需要进行 HTTP 请求时都会创建一个新线程,并且可以同时运行多个线程。我遇到的问题是,如果我已经有两个线程在运行,它们在调用 HttpSendRequest() 之后循环读取 I
我在使用 Delphi XE2 应用程序时遇到问题。有时,WinInet 对 ASMX 服务的调用会阻塞并且永远不会返回 - 用户必须从任务管理器终止进程才能关闭应用程序。要连接到 ASMX 服务应用
我正在从我的 C++ 应用向服务器上的 PHP 脚本发送一个 HTTP POST 请求。使用 HttpOpenRequest/HttpSendRequest/etc。目前,它会等待 PHP 脚本在 H
我正在创建一个可以从 Internet 下载文件的程序。在下载文件之前,我想获取文件大小,我已经尝试过 InternetQueryDataAvailable,但它给出的值为 0。 然后我尝试了 hHt
我正在制作一个 C++ 代理,它将使用 HttpSendRequest() 将信息(例如系统主机名)发布回中央服务器。我希望它回发的信息之一是操作系统。我创建了以下函数来获取系统主机名。 wstrin
我正在使用 wininet 连接到需要客户端证书的 URL。为了测试我的“自动纠错”,我在没有客户端证书的情况下进行此连接,行为是调用我的 SelectCertificate 函数。 我故意不将所有参
我是一名优秀的程序员,十分优秀!