我在用于开发的 Windows 8.1 机器上安装了 Wamp。我的问题是,在我运行执行轮询的脚本时,Apache 不会在合理的时间内为我提供来 self 正在处理的特定 Web 应用程序的页面。这是脚本及其后端实现
window.fetch_messages = function () // I call this when my page is loaded
{
var last_message = $("div.message:last").attr('data-ai_id');
var project_id = getParameterByName('project-id'); // Another one of my helpers
$.ajax({
url:'project_messages',
type:'POST',
data:{ project_id:project_id, latest_message:last_message },
timeout:50000,
success:new_messages,
error:function(data){ console.log(data); setTimeout(fetch_messages(),50000); }
});
};
和后端
do
{
$messages = $this->mentor_model->query_messages($this->project_id,$this->viewer, $this->last_message_id);
if($messages)
break;
usleep(25000);
}
while(empty($messages));
echo json_encode($messages);
exit;
这一切都有效,但如果 apache 没有响应我在合理时间内转到另一个页面或其他内容的其他请求,我将无法正常工作。我的机器上还有其他网络应用程序,它们在轮询时可以正常工作,但网络应用程序本身不会在合理的时间内响应其他请求,这只会在我在使用此脚本的页面上时发生。请注意,我还通过访问本地主机上使用 mysql 的另一个 wapp(coining)来确保 mysql 没有在此处出现问题,并且它响应良好。
apache 的交易是什么?有什么设置或我必须改变的东西吗?它应该能够很好地处理这个问题,因为它只是我测试的。
最佳答案
这不仅仅是一个资源处理问题。 session 的全面使用被阻止,因为有问题的脚本在运行时不允许使用 session 数据(因为它正在使用数据)。
一个简单的session_write_close()在脚本上调用 usleep()/sleep() 之前放置在循环中解决了我的问题。
在使用完 session 数据后将其放置在任何地方应该可以解决您的问题。
关于php - Apache 不会在轮询时提供服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26901862/