gpt4 book ai didi

c++ - XmlHttpRequest 错误?

转载 作者:可可西里 更新时间:2023-11-01 09:35:51 25 4
gpt4 key购买 nike

我正在编写一个程序,除其他外,它需要下载一个给定 URL 的文件。我懒得手动实现 Http/Https 协议(protocol),所以我需要一些库/对象/函数来完成这项工作。

关键要求:下载必须是异步的。也就是说,发出下载的线程必须能够在“下载文件时”做其他事情,而且下载必须能够随时中止而不会产生任何野蛮的副作用(例如内部调用 TerminateThread).

可有可无的要求:

  • 应该能够将文件下载到“内存中”。方法 - 在文件内容到达时读取文件内容,不一定将其保存到某个“文件系统”文件中。
  • 最好有一些方便的 Win32 进度通知机制(可等待事件、信号量、完成端口等),而不是仅仅定期轮询下载状态。

我选择了 XmlHttpRequest COM 对象来完成这项工作。它似乎工作得很好,而且它支持异步模式。

但是我注意到一段时间后它就停止工作了。也就是说,在多次成功下载文件后,它会停止下载任何内容。

我定期对其进行轮询以获取其状态,它报告“进行中”,但实际上什么也没有发生,也没有网络事件。此外,当同一进程创建另一个 XmlHttpRequest 对象实例以执行新下载时 - 效果是相同的。该对象报告“正在进行”,而它甚至不尝试连接到服务器(根据网络嗅探器和系统 TCP 状态)。

让这个对象恢复工作的唯一方法是重新启动进程。这让我怀疑对象中存在某种错误(抱歉,我指的是未记录的功能)。这也不是单个对象级别的错误,因为当对象被销毁并创建另一个对象时问题仍然存在。可能是实现此对象的 DLL 的某些全局状态。

有人知道吗?这是一个已知的错误?我很确定我的代码中不可能有另一个错误,因为在我看来错误是在 XmlHttpRequest 中。我已经做了足够多的测试并花时间使用调试器,毫无疑问地得出结论,这只是对象停止工作了。

顺便说一句,虽然对象应该工作,但我通过 MsgWaitXXXX API 调用完成所有等待。因此,如果这个对象需要消息循环才能正常工作(例如,它可能会创建一个隐藏的通知窗口并通过 WSAAsyncSelect 将其绑定(bind)到一个套接字)——我给它机会。

最佳答案

根据我自己的经验,我知道 XmlHttpRequest 的 Microsoft 实现没有完全符合 draft standard .特别是标准要求流数据应该能够在就绪状态“3”(接收)中提取,即 IE deliberately ignores .

不幸的是,尽管为了长轮询目的广泛使用了 XmlHttpRequest 对象,但我没有看到您所描述的内容。

关于c++ - XmlHttpRequest 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2896726/

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