网页聊天的原理是什么? PHP做服务器 我看56秀那个聊天就是即时的, 而且就是网页, 没用flash.突然发这个贴的时候想到一个方法, 后台不断的ajax获取数据就行了, 因为服务器可以写个专门的页面, 只处理新的数据, 数据量不大, 客户端用JavaScript显示上去. 刷新率可以做的很快, 比如几秒. 不知道这个方案是否可行. 不过56那个网页聊天看上去就是即时的, 不知道它是用的哪个技术. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 据听说有可能是ajax从后台取 同问吧 有一种是Java做服务器的, 使用一个长连接, 流媒体方式传输数据.刚刚发现 PHP也支持socket. 有一个思路, PHP也是能输出流的, 把文本作为流输出, 客户端用ajax获取这些数据流, 然后再转成文本输出, 就可以做到实时.不过实际上服务端还是要有个刷新过程, 看是否有新数据要输出. 不过比ajax刷新要效率高得多, 省去头数据了. 因为每次刷新, 数据可能就几条或者大多为空. 这是我写的代码, 测试可行, 浏览器是chrome.ajax = function(method, url, data) { var objxml = jsuse.createXMLHttpRequest(); //自己写这个函数, 我使用了一个库. if (url.indexOf("http://") != 0) { url = jsuse.BASE_URL + url; } objxml.open(method, url, true); //异步调用 objxml.setRequestHeader("Content-type", "application/x-octet-stream"); var pos = 0; objxml.onreadystatechange = function() { if (objxml.readyState == 4) { if (objxml.status == "200") { document.write("200 OK"); } else { //document.write(objxml.status); } } else if(objxml.readyState == 3) { var str = objxml.responseText; document.write(str.substr(pos)); pos = str.length; } else { document.write(objxml.readyState+"<br />"); } } try { objxml.send(data); } catch (e) { return false; } return true;}jsuse(function(){ ajax("post","test.php",""); //这一句会在onLoad里加载, 可以写在body的onLoad里.});PHP页面 set_time_limit(0); //设置页面永不超时 for($i=0;$i<3000;$i++){ //先把浏览器缓冲清掉, 不同浏览器这个值不同. echo " "; } ob_implicit_flush(true); //设置PHP实时输出 $n = 0; while(true) { echo "$n yeah :-))))<br />"; @ob_flush();//刷新缓冲. sleep(1); $n++; }测试可以连续实时的输出.上面代码有个问题, ajax取的数据会持续增大, 应该达到一个值, 重新连接一次. 服务器端也要有具体控制数据的方法. 怎么禁用sencha中scroller的反弹 js调用出现乱码 jquery 属性选择器 问一下,图片上滚带停顿 javascript错误"缺少对象,错误类型:424" 100分在线等 table里面的树状显示 请教大侠,为何用onsubmi方法的return false不能阻止表单的提交? 如何交换<table>中两个<tr>的位置? 表单判断问题。 通过jquery 给网站的textarea赋值,成功赋值,但通过jquery自动点击发布按钮时,却显示textarea没有数据 请教一个checkbox返回值的问题 求救!!如何让这段CSS支持IE浏览器!
ajax = function(method, url, data) {
var objxml = jsuse.createXMLHttpRequest(); //自己写这个函数, 我使用了一个库.
if (url.indexOf("http://") != 0) {
url = jsuse.BASE_URL + url;
}
objxml.open(method, url, true); //异步调用
objxml.setRequestHeader("Content-type", "application/x-octet-stream");
var pos = 0;
objxml.onreadystatechange = function() {
if (objxml.readyState == 4) {
if (objxml.status == "200") {
document.write("200 OK");
} else {
//document.write(objxml.status);
}
} else if(objxml.readyState == 3) {
var str = objxml.responseText;
document.write(str.substr(pos));
pos = str.length;
} else {
document.write(objxml.readyState+"<br />");
}
}
try {
objxml.send(data);
} catch (e) {
return false;
}
return true;
}
jsuse(function(){
ajax("post","test.php",""); //这一句会在onLoad里加载, 可以写在body的onLoad里.
});
PHP页面
set_time_limit(0); //设置页面永不超时
for($i=0;$i<3000;$i++){ //先把浏览器缓冲清掉, 不同浏览器这个值不同.
echo " ";
}
ob_implicit_flush(true); //设置PHP实时输出
$n = 0;
while(true) {
echo "$n yeah :-))))<br />";
@ob_flush();//刷新缓冲.
sleep(1);
$n++;
}测试可以连续实时的输出.上面代码有个问题, ajax取的数据会持续增大, 应该达到一个值, 重新连接一次. 服务器端也要有具体控制数据的方法.