多个工作进程调用 HttpReceiveHttpRequest

Posted

技术标签:

【中文标题】多个工作进程调用 HttpReceiveHttpRequest【英文标题】:multiple worker processes calling HttpReceiveHttpRequest 【发布时间】:2013-06-28 04:23:30 【问题描述】:

我想使用 Windows HTTP Server API 2.0 围绕我的旧 C++ 代码包装一个 RESTful Web 服务。我从 MSDN 中的示例应用程序开始,将其更改为使用 2.0 API,然后将该应用程序拆分为三个进程:一个创建命名队列和 url 组的控制器应用程序和两个相同的工作进程,它们是控制器应用程序的子进程.两个工作人员同步调用 HttpReceiveHttpRequest 并等待传入​​请求。当他们收到请求时,他们调用 Sleep(5000) 等待 5 秒,然后再次调用 HttpReceiveHttpRequest。这允许我在一个工作进程仍在响应第一个请求时从浏览器触发第二个请求。

一个工作进程获得第一个请求并等待。但是,第二个请求并没有按请求由第二个工作进程处理。相反,第一个工作进程获取第二个请求。如何让传入的请求分布在我的工作进程中?我预计每个请求都会转到 HttpReceiveHttpRequest 中等待的第一个工作进程。如果第一个工作进程仍在忙于处理请求,它将检查第二个工作进程。我做错了什么?

【问题讨论】:

我意识到我描述 HttpReceiveHttpRequest 处理的方式有点不对劲。 HttpReceiveHttpRequest 中的每个工作进程都试图从同一个命名队列中获取下一个请求。这些进程中只有一个会删除第一个请求。当第二个请求被放入队列时,第二个工作进程应该是唯一等待请求的进程,因此应该删除并处理第二个请求。 【参考方案1】:

我已经找到了问题所在。我正在使用带有两个选项卡的 Firefox,两个选项卡都具有相同的 url (http://127.0.0.1:80/test),然后执行全部刷新。显然,FF 不会同时发出这两个页面请求,而是发送一个,等待响应,然后发送另一个,即使选项卡中的动画看起来它们是同时发送的!如果我将 IE 用于一个选项卡,而将 FF 用于另一个选项卡,那么我会收到重叠的请求,并且我的示例应用程序使用两个工作进程,正如预期的那样!也适用于两个 IE 选项卡。只有 FF 表现出这种奇怪的行为。

【讨论】:

以上是关于多个工作进程调用 HttpReceiveHttpRequest的主要内容,如果未能解决你的问题,请参考以下文章

进程 线程

day21&22&23:线程进程协程

Nginx内部有使用多线程吗

python之多线程原理

使用来自多个进程的 fseek/fwrite 写入文件的不同区域?

僵尸进程和孤儿进程