php 和 mysql 实时提要

标签 php jquery mysql ajax

我正尝试在 php-mysql(和 jQuery)中构建一个实时更新的系统。 我的问题是我使用的方法是否好/正确,或者我是否应该研究另一种方法:

使用 jQuery 和 AJAX 我做了:

setInterval(function() {
  Ajax('check_status.php');
},4000);

在 check_status.php 中,我使用内存缓存来检查结果是 1 还是 0

$memcache = new Memcache;
$memcache->connect('127.1.0.1', 11211) or die ("");
$userid.$key = md5($userid."live_feed");
$result = $memcache->get($userid.$key);
if($result==1) {
  doSomething();
}

这个想法是用户 A 做了一些事情,然后更新了用户 B 的内存缓存。 然后通过 jQuery 每 4 秒检查一次内存缓存,这样我就可以对用户 B 进行 live_feed。

我使用 memcache 的原因是限制 mysql_queries,从而限制数据库的负载。

那么问题来了。我完全离开这里了吗?有没有更好的方法来减少服务器负载?

谢谢

最佳答案

这方面的服务器负载会很艰难,因为每个用户每 4 秒就会访问您的网络服务器。如果我是你,我会考虑另外两种选择。

选项 1,在我看来,两者中较好的是 Websockets。 Websockets 允许服务器和客户端之间的持久通信。可以使用 PHP 或其他工具创建 Web 套接字服务器。然后,您可以让所有客户端连接到同一个 Web 套接字,并将数据发送到连接的所有或单个客户端。在客户端,这是通过 Javascript 和不支持 Websockets 的旧浏览器的 flash 回退完成的。

选项 2 是一种称为长轮询 的技术。现在无论如何,您的客户必须每 4 秒访问一次 Web 服务器。在长轮询中,客户端发送一个 ajax 请求,并且在您的内存缓存状态发生变化之前,您不会从服务器返回响应。所以基本上你将你现在拥有的代码放在一个 while 循环中,暂停以防止它用完 100% 的服务器资源,并且只有在发生变化时才运行 doSomething()。然后在客户端收到响应时,启动一个新的 ajax 调用,再次等待新的响应。因此,尽管使用您当前拥有的内容,用户在一分钟内无论是否有事件都会点击服务器 15 次,但在这种方法中,用户只会在每次有实际事件时点击服务器。因此,这通常可以为您节省大量来回无用的连接。

查看这两个选项,看看哪个更适合您的情况。长轮询更容易实现,但效率不高。

关于php 和 mysql 实时提要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24712466/

相关文章:

javascript - 带有静止字符 e 输入的文本框数字和带有 javascript 的负整数

php - mySql 中的 DAYS 数据类型

php - 面对多级类别层次结构中的一些问题

php - 绑定(bind)空值时应该/必须使用 PDO::PARAM_NULL 吗?

c# - 从 WebService (.NET) 使用 C# 调用 javascript

JQuery Rails 样式表切换器不工作

php - 如何使用 Join 将最后插入的单列与子表中的多个值进行匹配

php - 不从多个表返回数据(php/sql)

php - 如何在 yii 的更新 View 中加载多个下拉列表中的选定值?

php - 带有帖子的 HTML 表单未实际调用 PHP 脚本