【问题标题】:php chat taking way to much memory! Jquery, php and mysqlphp聊天占用了很多内存! jQuery、php 和 mysql
【发布时间】:2011-08-25 17:15:19
【问题描述】:

所以我创建了一个与 jquery php 和 mysql 的聊天。它还使用 ajax。所以这里是代码

PHP进程页面:

$result = mysql_query("SELECT *
                         FROM messages 
                     ORDER BY id DESC  
                        LIMIT 30") or die(mysql_error());

while($row = mysql_fetch_array($result)) {
  if($row['correct'] == 1) {
    $correct = "<font color='green'>";
  } else {
    $correct = "<font color='red'>";
  }

  echo $correct;
  echo $row['name']. ": ". $row['message'] . "</font>";
  echo "<br />";
}

我在索引页面上的 jquery 是这样的

$(document).ready(function() {
  $('form[name=answer]').submit(function() {
    validate();
    return false;
  });

function validate() {
  $.post("http://localhost:8888/school/procees.php", 
          {answer: $('input[name=answer]').val(),
          questionid: $('input[name=questionid]').val(), 
          name: $('input[name=id]').val()}, 'json');
}

setInterval(function() { 
  $('#about').load('maketable.php');
}, 1000);

});

我知道运行检查然后将所有内容打印出来需要大量内存,我不知道如何以其他方式进行。欢迎对代码提出建议和批评。我该如何改进它?

【问题讨论】:

  • 连续轮询和数据库不是处理这个问题的好方法。大多数像 FB 使用一种称为长轮询(又名 Comet)的技术。 en.wikipedia.org/wiki/Comet_(programming) 当 html5 被更广泛地实现时,还将支持套接字连接,这将是实现这一点的最终方式,因为不需要在数据库或其他数据源中保存任何内容。消息会进来并立即发回给每个订阅者。

标签: php jquery mysql ajax optimization


【解决方案1】:

Node(js) 非常适合这种以最小开销支持高并发的确切场景。将它与socket.io 结合使用,您就拥有了适用于旧设备的 HTML5 套接字。

想查看在您的系统上运行的实时示例吗?只需在 github 上克隆 this project

【讨论】:

    【解决方案2】:

    您在这里使用的其他代码可能/可能无济于事 - 我想说的是,如果这是实时聊天,请考虑在 mysql 中使用 MEMORY 表类型 - 它的读取速度非常快,这使它成为一个很好的候选者应用类型。

    确保您的 ajax 请求只请求您尚未加载的数据 - 这可能会有所帮助。

    如果您需要更多帮助,我们也需要查看 maketable.php 代码..

    【讨论】:

    • 哎呀,我包含 maketable.php 没有处理你看到的代码是 make table
    • 当将 mssg 添加到对话中时,也会存储它的时间 - 当您提交更多聊天数据的请求时,包括上次请求时间(如果页面首次加载,则为 null),然后脚本可以仅选择条目从那时起已提交并返回那些。您必须存储 lastrequesttime 和 lastrequesttimetmp,然后再使请求更新 tmp 值 - 如果请求成功,请将 lastrequesttime 设置为 tmp 时间 - 如果不理会它 - 这样您就不会错过任何数据砰
    • @Ian Wood 在哪里可以找到有关此“mysql 中的MEMORY 表类型”的更多信息?
    • 我可能会从 google 开始,但为了节省您的搜索时间,试试这个 - dev.mysql.com/doc/refman/5.1/en/memory-storage-engine.html - 是的,它确实有表级锁定,但速度非常快。
    猜你喜欢
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2011-07-12
    • 2017-09-10
    相关资源
    最近更新 更多