Javascript ajax—如何使用ajax和settimeout构建聊天,而不占用大量虚拟内存?

Javascript ajax—如何使用ajax和settimeout构建聊天,而不占用大量虚拟内存?,javascript,php,ajax,Javascript,Php,Ajax,我正在尝试构建一个基于AJAX的聊天室,通过settimeout每秒接收数据。 我编写了一个基本代码,其中有一个数字,它每秒钟都会增加从php页面2获得的数字。 我通过在3种不同的浏览器中打开文件,从我的计算机上检查了它,发现它占用了服务器的大量虚拟内存。我担心的是,如果我以这种格式建立一个真正的聊天室,50人同时进入,会发生什么? 我知道setTimeout占用了很多内存,有没有其他方法来建立聊天室?或者我可以改进我所做的吗? 我很乐意回答 我就是这么做的: <body> <

我正在尝试构建一个基于AJAX的聊天室,通过settimeout每秒接收数据。 我编写了一个基本代码,其中有一个数字,它每秒钟都会增加从php页面2获得的数字。 我通过在3种不同的浏览器中打开文件,从我的计算机上检查了它,发现它占用了服务器的大量虚拟内存。我担心的是,如果我以这种格式建立一个真正的聊天室,50人同时进入,会发生什么? 我知道setTimeout占用了很多内存,有没有其他方法来建立聊天室?或者我可以改进我所做的吗? 我很乐意回答

我就是这么做的:

<body>
<h1 id='number'>0</h1>

<script>
function ajax() {
 if (window.XMLHttpRequest) {
  var a = new XMLHttpRequest()
 } else {
  var a = new ActivXObject('Microsoft.XMLHTTP')
 }
 return a
}

var settime = 1000;
var myTime;

ajaxMain();

function ajaxMain() {
 xmlhttp = ajax();
 xmlhttp.onreadystatechange = function() {
  if (((xmlhttp.readyState == 4) || (xmlhttp.readyState == 0)) && (xmlhttp.status == 200)) {
   if (xmlhttp.responseText) {
    id('mmm').innerHTML = (xmlhttp.responseText) * 1 + (id('number').innerHTML) * 1;
    myTime = setTimeout('ajaxMain()', settime)
   }
  } else {
   if (xmlhttp.responseText.match(/^\<\!/)) {
    clearTimeout(myTime);
    myTime = setTimeout('ajaxMain()', settime)
   }
  }
 }
 xmlhttp.open('GET', 'page2.php', true)
 xmlhttp.send()
}

</script>
</body>
</html>

0
函数ajax(){
if(window.XMLHttpRequest){
var a=新的XMLHttpRequest()
}否则{
var a=新的ActivXObject('Microsoft.XMLHTTP')
}
归还
}
var设置时间=1000;
var-myTime;
ajaxMain();
函数ajaxMain(){
xmlhttp=ajax();
xmlhttp.onreadystatechange=函数(){
如果((xmlhttp.readyState==4)| |(xmlhttp.readyState==0))&&(xmlhttp.status==200)){
if(xmlhttp.responseText){
id('mmm').innerHTML=(xmlhttp.responseText)*1+(id('number').innerHTML)*1;
myTime=setTimeout('ajaxMain()',settime)
}
}否则{

if(xmlhttp.responseText.match(/^\Thier)是Ashraf Gheith关于如何在PHP中创建基于AJAX的聊天系统的完整指南, 我将引用:

 CREATE TABLE `chat` (
`id` INT(9) NOT NULL AUTO_INCREMENT , 
`usrname` VARCHAR(255) NOT NULL , 
`color` VARCHAR(6) NOT NULL , 
`chattext` TEXT NOT NULL , 
`chattime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , 
PRIMARY KEY (`id`) 
 ) ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;
var lastTimeID=0;
$(文档).ready(函数(){
$('#btnSend')。单击(函数(){
sendChatText();
$('#chatInput').val(“”);
});
startChat();
});
函数startChat(){
setInterval(函数(){getChatText();},2000);
}
函数getChatText(){
$.ajax({
键入:“获取”,
url:“/refresh.php?lastTimeID=“+lastTimeID
}).完成(功能(数据)
{
var jsonData=JSON.parse(数据);
var jsonLength=jsonData.results.length;
var html=“”;
对于(var i=0;i
正文{
保证金:0;
填充:0;
}
#查看ajax{
显示:块;
溢出:自动;
宽度:500px;
高度:300px;
边框:1px实心#333;
保证金:0自动;
边缘顶部:20px;
}
#ajaxForm{
显示:块;
保证金:0自动;
宽度:500px;
高度:50px;
边缘顶部:10px;
}
#聊天输入{
宽度:454px;
}

聊天室示例

一些适当的代码缩进将使阅读和遵循代码变得更容易。如果你想建立一个适当的聊天室,我建议使用套接字。我在上面写了我的代码。这是一个基本的ajax和settimeout,它每分钟都会得到一个数字,并将其添加到数字中。在我没有要求代码之前,我要求你格式化/缩进code以使其更具可读性。:-)
 CREATE TABLE `chat` (
`id` INT(9) NOT NULL AUTO_INCREMENT , 
`usrname` VARCHAR(255) NOT NULL , 
`color` VARCHAR(6) NOT NULL , 
`chattext` TEXT NOT NULL , 
`chattime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , 
PRIMARY KEY (`id`) 
 ) ENGINE = MyISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;