0

我正在尝试使用 jQuery/AJAX、PHP 和 mySQL 构建基于聊天的移动应用程序。我不希望客户端移动设备必须每秒轮询服务器上的 PHP 脚本以检查是否有新的聊天消息到达,因此我使用 AJAX 的“长轮询”范例来保持连接打开时间更长并且实现更多的推式架构。以下是服务器上的 PHP 代码:

$newMessage = CheckForNewMessage();
while ($newMessage == NULL) {
  usleep(10000);
  $newMessage = CheckForNewMessage();
}
$response = array();
$response['msg'] = $newMessage;
echo json_encode($response);

然而,正如所写,这个 PHP 代码相当定期地轮询 mySQL DBMS(仍然是一个拉模式)。我想知道是否有一种方法可以在连接上实现推送范例(即,在 Web 层和数据层之间)。当新消息添加到表中时,我可以使用触发器或类似的东西来实现这一点吗?有没有人有这样做的经验?任何指针或想法将不胜感激。

4

2 回答 2

0

好吧,理论上可以编写一个用户定义的函数,该函数将作为某个 DB 操作的触发器,并(通过套接字)调用一些外部 PHP 脚本。

但是,我想,你仍然会有一个冲突:这个 PHP 脚本应该如何与你的代码交互?问题是您的架构仍然是“拉动”导向的:只有这次拉动是在某个周期性的时间范围内进行的。

于 2012-06-29T19:40:35.443 回答
0

MySQL 只是不适合这种通信。即使使用支持推送通知的 MS SQL,我仍然会认为使用它是一个错误。关系数据库用于存储数据。不发货

我建议使用一些 XMPP 服务器或(如果不可能的话)消息队列而不是 MySQL。请参阅http://php.net/manual/en/function.msg-get-queue.php作为开始。

于 2012-07-07T22:06:02.233 回答