【发布时间】:2020-05-13 14:00:56
【问题描述】:
我想知道 Windows API WinHTTP 是否可以使用 HTTP/2 多路复用(一个 TCP 连接上的多个请求)。如果是这样,是否有示例代码如何归档?
我发现了来自 Microsoft (https://docs.microsoft.com/en-us/windows/win32/winhttp/about-winhttp) 的这条消息:
注意
WinHTTP 不可重入,除非在异步完成回调期间。也就是说,当线程有一个对 WinHttpSendRequest、WinHttpReceiveResponse、WinHttpQueryDataAvailable、WinHttpSendData 或 WinHttpWriteData 等 WinHTTP 函数的调用挂起时,它绝不能再次调用 WinHTTP,直到第一次调用完成。可能发生第二次调用的一种情况如下:如果应用程序将异步过程调用 (APC) 排队到调用 WinHTTP 的线程,并且如果 WinHTTP 在内部执行可警报等待,则 APC 可以运行。如果 APC 例程也调用 WinHTTP,它会重新进入 WinHTTP API,WinHTTP 的内部状态可能会被破坏。
这就是为什么我不确定是否可以异步调用 WinHttpReadData。
【问题讨论】:
标签: http2 winhttp multiplexing