当新行添加到数据库时,Twitter 喜欢更新

Posted

技术标签:

【中文标题】当新行添加到数据库时,Twitter 喜欢更新【英文标题】:Twitter like update when new rows are added to the db 【发布时间】:2012-12-26 23:03:42 【问题描述】:

我有一个页面,内容是用phpmysql动态获取的。我使用foreach循环来显示所有内容。

foreach($data as $key)
            echo "<div id="post_content"> $key['post'] </div>";
      

现在我得到了我的提要,但这里的问题是,需要刷新页面才能从数据库中看到新的帖子行。 这就是推特的用武之地,当你在推特上并且有一个你正在关注的人的新帖子时,它会在提要的顶部显示“1条新推文”,当你点击它时,它会将推文的内容添加到饲料。 根据我的研究,我找到了几种方法来做到这一点;

    网络套接字。缺点:跨浏览器兼容性。

    使用 AJAX:refresh = setInterval(function(), 5000); 缺点:嗯,每 5 秒加载一次脚本:/

    有人向我推荐了 socket.io,我还在研究如何将它与 php 集成。

我的问题是,有没有其他有效的(最好是简单有效的)方法来做到这一点? 任何帮助将不胜感激。

【问题讨论】:

您不想为您可能拥有的每个连接都设置一个套接字。我会做AJAX。您可以通过让脚本在用户不活动一定量后不对服务器进行更新调用来改进您的脚本。这将使您的服务器免受非活动用户的攻击。 但是页面基本上是我的主页,即使对于活跃用户来说,它不会仍然效率低下吗? 如果您使用套接字,您将极大地限制您的站点可以同时拥有的用户数量。可以打开多少个套接字有一个硬性上限,您的服务器必须投入资源来保持这些套接字打开。 哦,我明白了,你觉得 node.js 和 socket.io 怎么样?它会属于同一只猫吗? 我从未使用过node.js。最重要的是,如果您走任何使用套接字的路线,您将受到限制。也许您可以对同时访问您网站的用户数量进行硬性限制。如果是这种情况,请选择使用套接字的解决方案。另请查看此线程:***.com/questions/1575453/… 【参考方案1】:

问题是任何与套接字相关的东西都对在特定时间点打开的连接数量有限制。因此,如果您不打算为数以万计的并发双工连接提供服务,那么最好将 AJAX 和 JSON 与 PHP 结合使用。 我建议您实施轮询间隔。例如,当用户在一定时间后不活跃时,增加间隔或假设 5-10 次轮询没有出现任何新内容,增加间隔,也许每次都加倍,直到达到 2 分钟。在获取消息或值时,将间隔缩短到 5 秒或更短。

【讨论】:

【参考方案2】:

最简单的方法是提供某种 API,以便您可以访问 JSON 格式的新“推文”,然后将它们添加到您的 html 中。 socket.io 也是一个不错的选择,因为它结合了多种技术,如 websockets、长轮询等,并且在使用旧浏览器时会很好地降级。您可以在 socket.io 上在线找到许多教程。但是 socket.io 依赖于 node.js 服务器端 JS,所以如果你不熟悉它,这可能有点复杂。不过看看这个链接:Using PHP with Socket.io

【讨论】:

谢谢,这只是让我承认我必须学习 node.js :( 您仍然可以通过提供 JSON API 来寻求仅 PHP 的解决方案,然后通过 AJAX 每 X 秒查询一次 是的,我考虑过,但我猜这效率低下。我怎么知道我的托管帐户允许我使用 node.js,你能推荐一个好的教程吗?谢谢@stefan 大多数托管公司不支持 node.js,只需通过电子邮件向他们询问即可。您可以通过 google 找到数百个教程 又是一个挫折,看来我现在还是坚持使用 AJAX 哈哈,谢谢@Stefan 的帮助,你自己使用 node.js 吗?

以上是关于当新行添加到数据库时,Twitter 喜欢更新的主要内容,如果未能解决你的问题,请参考以下文章

数据库更新时更新列表视图

将新行添加到数据库时的 Javascript 警报

在数据库中添加新行时,报表工作室中生成的自动更新报表

将新行添加到数据表的顶部

添加新行时自动插入日期戳

将新行添加到另一个工作表时,保持函数引用不变?