更新div标签,如果更新html文件?

时间:2012-01-11 09:20:26

标签: php html ajax

Demo.php 文件

<?php
function write_back()
{
  echo file_get_contents("sample.html");
  sleep(2);
  write_back();
}
write_back();
?>

导致我错误Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\omnama\demo.php on line 8

我每2秒钟回复一次从php脚本到ajax请求的html内容。

Demo.html 文件

function loadXMLDoc()
{
 var xmlhttp;
   if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari
     xmlhttp=new XMLHttpRequest();
   } 
   else
   {// code for IE6, IE5
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
xmlhttp.onreadystatechange=function()
{
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
       document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
    }
   xmlhttp.open("GET","demo.php",true);
   xmlhttp.send();
}

让我解释一下我想做什么。我有不断更新的sample.html文件,它可能包含当前登录的用户数或者可以聊天的人数,等等。

我使用了一个html文件,因为无论何时新用户登录,都会使用PHP文件概念使用用户名更新html文件,然后将这些html文件更新为所有在线用户。所以我只是更新{ {1}}标记有demo.php文件

给出的响应

我使用过HTML文件,因为每次都要请求MySql检查是否有人登录,会导致严重的服务器问题,这就是为什么我要使用html文件。但每次回复文件内容都会给我这些错误。

我正想着这样做。只检查文件的最后修改时间,如果它与前一个修改时间不同,则回显其内容,这是正确的方法吗?

有人能解释我如何跟踪sample.html并将其内容更新为登录用户?我需要一些帮助。谢谢

2 个答案:

答案 0 :(得分:0)

可能有几种方法可以解决这个问题,最后我猜测它取决于你有多少请求/更新。

但是我认为首先你需要决定如何检索你感兴趣的结果。

  • 简单解决方案:您可以使用setInterval()并让浏览器在服务器(POLL)上执行新的XmlHttpRequest,以按特定的预定义时间间隔检索新的用户列表

  • 更复杂的解决方案:您可以建立一个“Web-socket”,如服务器和浏览器之间的连接,然后按下用户列表中的浏览器。您可以设置像服务器,长轮询自定义实现或socket.io这样的彗星(http:// http://socket.io/ - 我是一个巨大的粉丝)并让服务器通知监听浏览器值得通知发生。

现在到服务器端:

就我个人而言,我并不喜欢你的方法必须写入html文件以避免数据库查询。显而易见的方法是根据请求在数据库中查询新用户并回复。是否有这么多用户会导致服务器瓶颈?如果是这样,你可以添加更多的服务器吗? (mysql被复制只是为了服务这个?)如果你对所提出的请求添加时间戳(或告诉我自XXX以来发生的变化),你可能会加快查询速度。

你有其他选择吗?即如果你最终使用socket.io,你的整个在线 - 离线状态可以由服务器端的套接字状态处理而不需要其他任何东西。 (socket.io服务器知道哪些客户端连接到它)。

另一个想法可能是将在线用户保留在内存存储器中,例如memcached或redis服务器。因此,在每次登录/注销时,您都会更新一个memcached服务器,并相应地从中检索结果。

如果我花更多的时间,我可能会想到更多的方法。但是,您需要确保的是,如果您确实需要所有这些,并且无法使用简单的SQL查询。

答案 1 :(得分:0)

我不认为使用递归函数write_back是个好主意。 每2秒使用ajax发送xmlhttprequest(setTimeout或setInterval)可能会更好, 或者你可以使用彗星科技。 第一个要回答的问题,希望得到这些帮助。