我偶然发现了微软的HTTP Server API.介绍说明:
HTTP Server API使应用程序无需使用Microsoft Internet Information Server(IIS)即可通过HTTP进行通信.应用程序可以注册以接收特定URL的HTTP请求,接收HTTP请求以及发送HTTP响应.HTTP Server API包括SSL支持,以便应用程序可以在没有IIS的情况下通过安全HTTP连接交换数据.它还可以与I/O完成端口配合使用.
找到这个很酷的东西,我仔细研究了两个版本API的功能列表.现在,文档中提到I/O完成端口的唯一其他部分是HttpReceiveHttpRequest()函数.最后一个参数是一个可选OVERLAPPED结构,具有以下描述:
对于异步调用,设置
pOverlapped为指向OVERLAPPED结构; 对于同步调用,将其设置为NULL.同步调用将阻塞,直到请求已到达指定队列并且已检索到其中的一些或全部,而异步调用会立即返回ERROR_IO_PENDING,然后调用应用程序使用GetOverlappedResult()或I/O完成端口来确定操作何时完成.有关使用OVERLAPPED结构进行同步的更多信息,请参阅同步和重叠输入和输出.
没有其他信息,所有结构都是不透明的,故意隐藏连接信息.另请注意,同步和重叠输入和输出主题未提及HTTP API.
有没有人知道如何将HTTP API的队列连接到I/O完成端口?
使用 IO 完成端口在理论上非常简单,但在实践中却很糟糕:P
“正常”用法是:
HANDLE将每个对象与 IO CompletionPort 句柄关联起来。现在,每次应用程序在HANDLE(通过传入结构发出信号)发出异步操作时,等待GetOverlappedResultOVERLAPPED返回的线程之一都会指示已完成操作的通知。
明确的含义是HttpCreateRequestQueueHANDLE返回的结果可以与 IO Completion 端口关联,后续异步操作将导致GetOverlappedResult返回操作结果。
| 归档时间: |
|
| 查看次数: |
2051 次 |
| 最近记录: |