MySQL触发器+通知长轮询Apache / PHP连接

时间:2010-09-15 17:31:18

标签: php mysql apache comet long-polling

我知道Comet服务器技术可以做到这一点,但我想写一些简单的和本土的东西。

当一条记录插入MySQL表时,我希望它以某种方式将这些数据传递给一系列使用PHP(或其他)的长轮询Apache连接。因此,多个人通过他们的浏览器“监听”,第二个发生MySQL INSERT,它被发送到他们的浏览器并执行。

简单的方法是让PHP脚本轮询MySQL数据库,但这并非真正从服务器推送并引入了一些不必要的数据库查询令人无法接受的顺序。我希望从MySQL获取数据到长轮询连接,基本上没有监听器查询。

关于如何实现这一点的任何想法?

3 个答案:

答案 0 :(得分:2)

我一直在尝试各种想法来解决这个问题,并且取消轮询sql查询的唯一方法是轮询文件。如果填充等于0,则继续循环。如果file等于1有循环运行sql查询并发送给用户。它确实增加了另一层次的复杂性,但我认为这意味着mysql的工作量减少,但对于apache或者循环守护进程的情况则相同。你也可以将命令发送到一个守护进程“彗星”样式,但是它将在每个请求上进行分叉和循环,以及我看到的套接字如何工作,所以希望有人能找到解决方案。

答案 1 :(得分:0)

这是我多年来一直在寻找的东西。我没有找到SQL服务器在INSERTS,DELETE和UPDATES上推送消息的任何功能。

TRIGGERS可以在这些事件上运行SQL,但这在这里没用。

我猜你必须构建自己的系统。您可以轻松地从PHP广播UDP(Example in first comment),问题是PHP在服务器端运行而客户端是静态的。

我的猜测是你可以在客户端上运行Java Applet,监听UDP消息,然后触发页面更新。

这只是写作时刻的一些想法......

答案 2 :(得分:0)

MySQL可能不是解决此问题的正确工具。 Regilero建议切换你的数据库,但一个更简单的解决方案可能是使用像redis这样有pub / sub功能的东西。

http://redis.io/topics/pubsub