我偶然发现了微软的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结构进行同步的更多信息,请参阅Synchronization and Overlapped Input and Output。
没有其他信息,所有结构都是不透明的,故意隐藏连接信息。另请注意,同步和重叠输入和输出主题未提及HTTP API。
有没有人知道如何将HTTP API的队列连接到I / O完成端口?
答案 0 :(得分:4)
在理论上使用IO完成端口非常简单,但在实践中却很简单:P
“正常”用法是:
现在,每次应用程序在HANDLE上发出异步操作时(通过传入OVERLAPPED结构信号),完成操作的通知将由等待GetOverlappedResult返回的其中一个线程指示。
明确的含义是HttpCreateRequestQueue返回的HANDLE可以与IO Completion端口关联,后续的异步操作将导致GetOverlappedResult返回操作的结果。