这个聊天脚本有效吗?

时间:2010-08-16 03:33:28

标签: php ajax chat long-polling

我使用php和ajax聊天,我正在使用while循环来检查数据库中的新消息。

这是检索邮件的代码:

//retrive message

function update(){

$(document).ready(function(){

$.ajax({

async: true,

type: "POST",

url: "listen.php",

success: function(data){

$("#myp").before(data);

},

complete: function(){

window.setTimeout("update();",100);
}

});

});

};


//wating for new message

<?php
include_once("connect.php");

$type="";

while($type!=='n'){


usleep(1000);

$search=mysql_query("SELECT * from chat ORDER BY id DESC LIMIT 1");

$row=mysql_fetch_assoc($search);

$type=$row['type'];

$id=$row['id'];

}

echo $row['message'] . "<br/>";


mysql_query("UPDATE chat SET type='o' WHERE id=$id");


?>

现在这个工作正常,php文件不断检查是否有任何新消息,更新函数在页面加载时启动并等待响应。 但它有效吗?如果我会在网站上使用它,我担心它会对服务器造成太大压力,因为while循环。有没有人知道一种方式,使这个while循环更加服务器友好?

1 个答案:

答案 0 :(得分:1)

你的预感是正确的。典型的服务器设置可以回答每秒100-1000个PHP请求之间的任何情况,因此每个客户端每秒执行10个请求会占用服务器上很多的资源。虽然它可能会为少数人创造,但它不会很好地扩展。您的服务器最多可能在10到100个用户之间(相当低)。

一个解决方法是增加每次服务器轮询之间的时间,但这只是一个线性修复,会降低用户的体验。

更好的解决方案可能是使用comet方法。纯粹使用PHP很难(如果不是不可能),所以你需要处理一些外部API来处理长的http请求。