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

7
我知道有一些Comet服务器技术可以做到这一点,但我想编写一些简单的自制程序。当向MySQL表中插入记录时,我希望以某种方式使用PHP(或其他语言)将此数据传递给一系列长轮询的Apache连接。因此,多个人通过其浏览器“监听”,并且在MySQL INSERT发生的同时,数据将被发送到他们的浏览器并执行。
最简单的方法是让PHP脚本轮询MySQL数据库,但这并不是真正的服务器推送,并引入了一些不必要的数据库查询顺序。我希望能够在没有听众查询的情况下,将数据从MySQL传输到长轮询连接。
您有关于如何实现这一点的任何想法吗?
3个回答

2

我一直在尝试各种想法来解决这个问题,唯一能够消除sql查询轮询的方法是改为轮询文件。如果文件等于0,则继续循环。如果文件等于1,则运行sql查询并发送给用户。这确实增加了另一个复杂度级别,但我认为这意味着mysql需要做更少的工作,但apache或任何循环守护程序需要做相同的工作。你也可以将命令发送给一个"comet"风格的守护进程,但根据我对套接字工作方式的了解,它也将在每个请求上进行分叉和循环,因此希望有人能找到解决这个问题的办法。


0

MySQL可能不是解决这个问题的正确工具。Regilero建议切换您的数据库,但更简单的解决方案可能是使用像redis这样具有发布/订阅功能的工具。

http://redis.io/topics/pubsub


0

这也是我多年来一直在寻找的东西。我没有找到任何功能,可以在INSERTS、DELETE和UPDATES时由SQL服务器推出消息。

触发器可以在这些事件上运行SQL,但这对此处无用。

我想你必须构建自己的系统。你可以很容易地从PHP广播UDP(第一个评论中的示例),问题是PHP运行在服务器端,而客户端是静态的。

我猜你可以在客户端上运行一个Java小程序,监听UDP消息,然后触发页面更新。

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


也许触发器可以写入类似于memcached的东西,然后PHP可以轮询它? - phazei
PHP是静态的,不会在后台“运行”。有一些技巧可以让它看起来像一个“线程”,但接下来就会出现下一个问题,即更新客户端页面。我认为轮询必须通过AJAX完成。只需轮询最后修改日期(由触发器编写)即可。如果它更新了,重新加载页面即可。 - Max Kielland

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接