我正在使用的用于开发系统的apache服务器不会响应请求,而正在运行控制消息轮询的脚本。这只发生在域级别上,这意味着我可以向其他任何托管的应用程序发送http请求并获得响应。大约一分钟后,我最终得到了回复。
这是Js
window.fetch_messages = function ()
{
var last_message = $("div.message:last").attr('data-ai_id');
var last_message_status = $("p.message_status:last").text();
var project_id = getParameterByName('project-id');
$.ajax({
url:'/project_messages',
type:'POST',
data:{ project_id:project_id, latest_message:last_message, status:last_message_status },
timeout:50000,
async: true,
success:new_messages, // This upon completion also resends the request
error:function(data){ console.log(data); setTimeout(fetch_messages(),50000); }
});
}; // When On the page that uses this I call this function to start polling
这是服务器端代码
do
{
// Check for status change
$status_change = $this->mentor_model->query_status($this->project_id, $this->last_message_id, $this->last_message_status, $_SESSION['user']);
// Check for new messages
$messages = $this->mentor_model->query_messages($this->project_id, $this->last_message_id);
// If there is a status update or new message.
if($messages || $status_change)
break;
usleep(1000000);
}
while(empty($messages) && empty($status_change));
echo json_encode(array("messages"=>$messages, "status"=>$status_change));
exit;
当正在运行此操作时服务器需要很长时间来处理任何请求天气它是GET,POST或其他AJax请求。 Iv也试图改变这两个代码集,只要它的长轮询,服务器将需要很长时间来处理。
我有这个错误还是有一些apache设置我想改变。在Windows 8.1上使用xamp也尝试了wamp而没有改变
答案 0 :(得分:2)
感谢史蒂文。 Ansewer直接从php手册页的源头 对于session_write_close();
如果有的话,你可以通过sleep()调试任何有趣的乐趣 你的会话仍然有效。例如,一个页面 ajax请求,其中ajax请求轮询服务器端事件(和 可能不会立即返回。)
如果ajax函数没有执行session_write_close(),那么你的外 页面将显示为挂起,并在新选项卡中打开其他页面 也失速了。