7

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

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

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

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

4

3 回答 3

2

我也一直在尝试各种想法来解决这个问题,而取出 sql 查询轮询的唯一方法是轮询文件。如果填充等于 0,则继续循环。如果文件等于 1,则循环运行 sql 查询并发送给用户。它确实增加了另一个级别的复杂性,但我认为这意味着 mysql 的工作量更少,但对于 apache 或任何循环守护程序来说都是一样的。您也可以将命令发送到守护进程“彗星”样式,但它也会根据我所看到的套接字如何工作的内容对每个请求进行分叉和循环,因此希望有人能找到解决方案。

于 2010-12-16T20:00:54.487 回答
0

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

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

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

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

这只是写作时的一些想法……

于 2010-12-02T17:08:25.110 回答
0

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

http://redis.io/topics/pubsub

于 2011-08-23T17:35:16.157 回答