Php 这个聊天脚本有效吗?
我使用php和ajax进行了一次聊天,并使用while循环检查数据库中的新消息 这是检索消息的代码:Php 这个聊天脚本有效吗?,php,ajax,chat,long-polling,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: funct
//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");
?>
//检索消息
函数更新(){
$(文档).ready(函数(){
$.ajax({
async:true,
类型:“POST”,
url:“listen.php”,
成功:功能(数据){
美元(“#myp”)。之前(数据);
},
完成:函数(){
setTimeout(“update();”,100);
}
});
});
};
//等待新消息
你的直觉是正确的。一个典型的服务器设置可以每秒响应100-1000个PHP请求,因此每台客户机每秒执行10个请求将消耗服务器上的大量资源。虽然它可以为一些人工作,但它不会很好地扩展。您的服务器可能最多有10-100个用户(这相当低)
一个修复方法是增加每次服务器轮询之间的时间,但这只是一个线性修复,会降低用户的体验
更好的解决方案可能是使用一种方法。纯粹用PHP很难做到这一点(如果不是不可能的话),因此您需要处理一些外部API来处理长http请求。您的直觉是正确的。一个典型的服务器设置可以每秒响应100-1000个PHP请求,因此每台客户机每秒执行10个请求将消耗服务器上的大量资源。虽然它可以为一些人工作,但它不会很好地扩展。您的服务器可能最多有10-100个用户(这相当低)
一个修复方法是增加每次服务器轮询之间的时间,但这只是一个线性修复,会降低用户的体验
更好的解决方案可能是使用一种方法。纯粹用PHP很难做到这一点(如果不是不可能的话),因此您需要处理一些外部API来处理冗长的http请求。谢谢,但我不知道comet到底是什么,我在哪里可以了解更多有关它的信息?因为我不知道我到底在找什么,所以谷歌没有真正的帮助。@Petre Comet是指客户端将连接到服务器并侦听,直到服务器准备好将数据推送到客户端。这允许一种模拟的“双向”通信。通常HTTP是单向的(客户端->服务器),但Comet允许服务器将事件推送到客户端。使用PHP实现这一点相当困难,因为每个连接都需要一个PHP进程(由于ram开销,这是非常有限的)。这就是为什么最好研究第三方comet服务器的原因。他就是一个例子。谢谢,但我不明白彗星到底是什么,我在哪里可以读到更多关于它的信息?因为我不知道我到底在找什么,所以谷歌没有真正的帮助。@Petre Comet是指客户端将连接到服务器并侦听,直到服务器准备好将数据推送到客户端。这允许一种模拟的“双向”通信。通常HTTP是单向的(客户端->服务器),但Comet允许服务器将事件推送到客户端。使用PHP实现这一点相当困难,因为每个连接都需要一个PHP进程(由于ram开销,这是非常有限的)。这就是为什么最好研究第三方comet服务器的原因。他就是一个例子。