PHP / AJAX长轮询:返回新内容,因为它可用

时间:2011-03-21 15:58:40

标签: php xml ajax

我正在创建一个PHP / AJAX聊天客户端。应用程序向PHP脚本发出AJAX请求,该脚本获取XML文件的内容,并响应内容。然后客户端解析XML并显示聊天。 XML文件包含所有聊天,但为了节省服务器资源,我只希望PHP脚本返回新聊天,而不是所有聊天。这是我的XML文件:

<?xml version="1.0" encoding="ISO-8859-1"?> <chat> <message> <hour>12</hour> <minute>06</minute> <half>AM</half> <day>Saturday</day> <month>March</month> <date>19th</date> <body>Hey Guys!</body> </message> <message> <hour>12</hour> <minute>08</minute> <half>AM</half> <day>Saturday</day> <month>March</month> <date>19th</date> <body>How are you?</body> </message> <message> <hour>3</hour> <minute>28</minute> <half>PM</half> <day>Saturday</day> <month>March</month> <date>19th</date> <body>Good, thanks!</body> </message> </chat>

<message>代码定义了每个新聊天,代码<hour><minute><half><day><month>和{{ 1}}定义每个聊天发送的时间,<date>包含每个聊天。

这是我想到的解决方案:

  1. 向XML文件添加标记,告知每个聊天的编号:<body>
  2. 在AJAX请求中,让客户端将最新的聊天编号发送到PHP脚本以检查它是否是最新的,然后让PHP持续检查XML文件中是否有<number>12</number>标记,其数字大于那个,然后当有一个更大的数字时返回聊天。
  3. 我不知道这会有多好用,有没有更好的方法呢?再一次,我只是希望PHP脚本在他们来时返回新聊天。有人可以帮助我或指出我可能有用的方向吗?谢谢!

4 个答案:

答案 0 :(得分:2)

你的想法是对的,但是......寻找新的聊天内容为每个请求打开你不断增长的xml文件...对你的服务器来说可能会变得很重!为什么不使用数据库,它会更轻,甚至可能有db可以使用xml文件作为后端......

答案 1 :(得分:1)

就个人而言,我会记录数据库中的所有聊天消息。然后,每个 x 秒运行类似于以下内容的查询:

SELECT *
FROM chat_messages
WHERE chat_id = 'your-chat-id'
AND time_sent > 'last-time-queried'
ORDER BY time_sent ASC

你可以将它包装在一个独立的脚本中,该脚本以XML格式返回格式,然后使用jQuery命中。然后在您的回调参数循环中回滚任何返回的XML节点,并将它们作为新的聊天文本行插入到您的请求文档中。

答案 2 :(得分:0)

也许您正在寻找Comet解决方案?有很多线程讨论类似的主题,例如:

答案 3 :(得分:0)