Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这个聊天脚本有效吗?_Php_Ajax_Chat_Long Polling - Fatal编程技术网

Php 这个聊天脚本有效吗?

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

我使用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");


?>
//检索消息
函数更新(){
$(文档).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服务器的原因。他就是一个例子。