基于Ajax的PHP个人消息系统

时间:2012-02-08 02:10:58

标签: php javascript mysql ajax messaging

我正在尝试构建一个基于MySQL,PHP,Ajax的个人消息系统。

所有消息都有一个表 - msghistory,看起来像

enter image description here

另一个用于用户最后一条消息检查日期记录 - chkdate

系统的工作原理如下:

当用户登录页面时,页面会触发Ajax autocheck。 Ajax每10秒调用一次php。 PHP端按用户ID检查新消息。首先检查chkdate,然后检查msghistory:如果在上次检查日期之后没有消息,那么系统将不会通知用户,否则将通知此

如果有1000个用户,我认为这种方式会大量加载服务器。我想知道上面解释的方法是否最佳?如果没有,你怎么看待这个,哪种方式更好?

1 个答案:

答案 0 :(得分:1)

长期投票是一个好主意。这里大概是如何工作的(尽管你可以改变使用的时间长度)。让您的PHP脚本(客户端请求的脚本)运行(半)无限循环,检查数据库中的新消息。如果没有找到消息,请使用sleep()函数在循环再次通过之前等待大约十秒钟。找到消息后,将其发送给客户端并退出循环。然后,客户端可以显示该消息,然后向"长轮询"开始新的请求。 PHP脚本,再过十秒钟。

这是一个演示PHP脚本: $用户名= $ _ GET ["用户名"];

<?php
while(1) {
    $messages=mysql_query("SELECT * FROM `msghistory` WHERE `to_id`='$username'");
    if (!mysql_num_rows($messages) === 0) {
        //do whatever message processing and printout you need to do here
        break;//break out of the loop. the script terminates and returns its messages to the client
    }
}
?>

在不久的将来,我们将看到WebSockets的实现,它允许客户端和服务器之间的实时推拉通信。但是,在许多情况下,这项技术还没有准备好使用。在此之前,长时间的民意调查是可行的方法。