0

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

我通过在 mysql 表中插入新数据时使用 ajax 自动刷新内容来完成此操作。问题是它每 10 秒访问一次 DB 以检查过去 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);

post.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'];
}

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

4

2 回答 2

2

您可以使用一些缓存。

使用varnish之类的 http-cache并在每次撰写新文章时重置它 - 否则只需从 varnish 提供 html 页面。这应该会大大提高您的速度和可能的用户。

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

于 2012-09-07T12:38:17.087 回答
2

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

看这个stackoverflow的帖子CakePHP, v2.0, Cache的官方文档

它在app/Config/bootstrap.phpCakePHP 的文件中完成:

<?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,
));

您列出了几个选项:FileCache、ApcCacheWincacheXcacheEngineMemcacheEngineRedisEngine。当然,您可以尝试任何缓存库,因为 cakePHP 足够灵活,可以集成它。

于 2012-09-07T12:38:31.043 回答