我正在尝试构建一个基于MySQL,PHP,Ajax的个人消息系统。
所有消息都有一个表 - msghistory
,看起来像
另一个用于用户最后一条消息检查日期记录 - chkdate
。
系统的工作原理如下:
当用户登录页面时,页面会触发Ajax autocheck。 Ajax每10秒调用一次php。 PHP端按用户ID检查新消息。首先检查chkdate
,然后检查msghistory
:如果在上次检查日期之后没有消息,那么系统将不会通知用户,否则将通知此
如果有1000个用户,我认为这种方式会大量加载服务器。我想知道上面解释的方法是否最佳?如果没有,你怎么看待这个,哪种方式更好?
答案 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的实现,它允许客户端和服务器之间的实时推拉通信。但是,在许多情况下,这项技术还没有准备好使用。在此之前,长时间的民意调查是可行的方法。