如何用PHP创建一个一次处理1000个用户的实时博客平台?

如何用PHP创建一个一次处理1000个用户的实时博客平台?,php,jquery,mysql,ajax,cakephp,Php,Jquery,Mysql,Ajax,Cakephp,我正在使用实时博客平台,该平台必须使用CakePhp或Php实现。 它一次必须处理1000个用户 我通过在mysql表中插入新数据时使用ajax自动刷新内容来实现这一点。问题是,它每10秒点击一次数据库,以检查数据是否在过去60秒内插入。如果计数结果为1,则我编程刷新内容。但这并不是一个优化的解决方案 有什么方法可以实现这一点吗 我的代码-对livefeed控制器的ajax调用: var auto_refresh = setInterval( function() { $.po

我正在使用实时博客平台,该平台必须使用CakePhp或Php实现。 它一次必须处理1000个用户

我通过在mysql表中插入新数据时使用ajax自动刷新内容来实现这一点。问题是,它每10秒点击一次数据库,以检查数据是否在过去60秒内插入。如果计数结果为1,则我编程刷新内容。但这并不是一个优化的解决方案

有什么方法可以实现这一点吗

我的代码-对livefeed控制器的ajax调用:

var auto_refresh = setInterval(
  function()
  { 
    $.post('/blog/posts/liveFeed', function(data) {
    if(data >0){
      alert(data);
      $('#content').load(window.location.href);
    }
  });
  return false;
}, 10000);
posts.php中的Livefeed控制器:

public function liveFeed() {
  $res=$this->Post->query('SELECT count(*) AS data FROM posts where TIME_TO_SEC(TIMEDIFF(NOW(), created)) < 60');
  echo $res[0][0]['data'];
}
公共函数liveFeed(){
$res=$this->Post->query('SELECT count(*)作为时间从秒到秒(TIMEDIFF(NOW(),created))<60'的帖子的数据);
echo$res[0][0][data'];
}

我不擅长cakePhp。如果我的代码看起来不专业,请原谅。

您可以使用一些缓存

使用http缓存,就像每次写新文章时重置它一样——否则只需从varnish交付html页面即可。这将大大提高您的速度和可能的用户


您仍然可以使用ajax请求每隔10秒重新加载一次页面—它只会加载缓存的页面,而不是每次都查询数据库。

您可以使用一些缓存

使用http缓存,就像每次写新文章时重置它一样——否则只需从varnish交付html页面即可。这将大大提高您的速度和可能的用户


您仍然可以使用ajax请求每10秒重新加载一次页面-它只会加载缓存页面,而不是每次都查询数据库。

如果我是您,我将在数据库和webapp之间实现一些缓存逻辑。否则,当有太多用户登录并同时查询大量博客文章时,您的内存就会出现问题

看看这个和这个

它是在CakePHP的文件
app/Config/bootstrap.php
中完成的:

<?php
Cache::config('short', array(
    'engine' => 'File',
    'duration' => '+1 hours',
    'path' => CACHE,
    'prefix' => 'cake_short_'
));

// long
Cache::config('long', array(
    'engine' => 'File',
    'duration' => '+1 week',
    'probability' => 100,
    'path' => CACHE . 'long' . DS,
));

如果我是你,我将在数据库和webapp之间实现一些缓存逻辑。否则,当有太多用户登录并同时查询大量博客文章时,您的内存就会出现问题

看看这个和这个

它是在CakePHP的文件
app/Config/bootstrap.php
中完成的:

<?php
Cache::config('short', array(
    'engine' => 'File',
    'duration' => '+1 hours',
    'path' => CACHE,
    'prefix' => 'cake_short_'
));

// long
Cache::config('long', array(
    'engine' => 'File',
    'duration' => '+1 week',
    'probability' => 100,
    'path' => CACHE . 'long' . DS,
));

清漆确实很快。它在普通硬件上每秒可以处理数千个请求。只有在mysql表中插入新记录时,才有办法重新加载页面吗?不太可能。您必须将消息推送到客户端,而普通的体系结构不支持如此简单的推送消息。但对于varnish来说,这并不是一个问题,因为您只提供了一个缓存的html页面,实际上速度非常快。只要在每次有新记录时删除缓存的页面,页面就会在缓存中生成一次,然后从缓存中再次传递。Varnish确实非常快。它在普通硬件上每秒可以处理数千个请求。只有在mysql表中插入新记录时,才有办法重新加载页面吗?不太可能。您必须将消息推送到客户端,而普通的体系结构不支持如此简单的推送消息。但对于varnish来说,这并不是一个问题,因为您只提供了一个缓存的html页面,实际上速度非常快。只要在每次有新记录时删除缓存的页面,页面就会在缓存中生成一次,然后从缓存中再次传递。只有在mysql表中插入新记录时,才有办法重新加载页面吗?如果在mysql中插入新记录,为什么不触发缓存的编程更新。。。类似于如果找到了cacheKey,则加载cache,否则查询数据库并缓存构建的http响应(或将随ajax请求加载的html部分结果)。只有在mysql表中插入新记录时,才能重新加载页面吗?如果在mysql表中插入新记录,为什么不触发缓存的编程更新。。。类似于如果找到了cacheKey,则加载cache,否则查询数据库并缓存构建的http响应(或将随ajax请求加载的html部分结果)。