1

想象一下,我们正在为我们的网站用户提供一个消息框系统,我想要做的是,如果向成员发送了一条新消息,而目标成员在他的收件箱中,他可以在收到后立即看到一条通知消息新消息。

为此,我们可以拥有“new_messages” div,它将使用带有 setInterval() 的 jQuery 刷新并发送查询以查看是否有新消息,但如果我们有 10.000 个成员,我们不能发送 10.000 个查询,这可能会杀死服务器!我希望仅在 hi 收到新消息时才为目标成员显示通知。类似的,我们可以在我们的页面中有一个“监听”div,当新消息被触发时它会被触发。

我还阅读了有关 MySQL 触发器的信息,但似乎这不是解决此问题的方法,因为它可能会向数据库触发另一个 SQL 语句,而无助于向用户显示通知。

那么这种情况的解决方案是什么?

提前致谢

4

2 回答 2

2

您可以查看PHP Comet 系统问题,了解有关将实时事件从服务器推送到浏览器的想法。或者尝试查看使用 Websockets 的详细信息。但是这些对于 PHP 来说并不能很好地适应。

但是,如果您希望实现某种聊天,请尝试查看http://www.phpfreechat.net/

于 2012-05-20T10:31:34.790 回答
1

或者您可以使用Long-Polling,但我认为 PHP 并不是解决整个问题的最佳解决方案。

最好通过此处找到的报价来解释

我不会这样做的原因有很多,这里有一些:

PHP 是为快速执行而设计的(不是为了等待) PHP 将迫使您在服务器端进行某种轮询并依赖 sleep() PHP 会吃掉您的 RAM,而每个请求的生成进程也是如此(Apache 会这样做)

但是你可以做到这一点,使用睡眠,轮询数据库(或者更好的缓存 APC/Memcache)。

如果您想做类似的事情,请使用一些可以处理事件的技术:Python(Tornado、gevent、eventlet、Twisted,...),Ruby(Eventmachine,...),Erlang,Scala,服务器端 JavaScript(node.js, ……),……</p>

抱歉,如果这不是您问题的直接答案,我仍然鼓励您尝试在纯 PHP 中执行此操作以查看其行为方式(尤其是 Web 服务器)。

于 2012-05-20T10:37:47.267 回答