就是那种一对一聊天的 而且看样子不是那种靠刷新做的
我感觉应该是ajax来做的 不过我前两天试着做了一下 失败了哎
谁有这方面的经验 说一下吧
29 个解决方案
#1
服务推, 或flex
#2
我以前问过同样的问题
http://hi.csdn.net/link.php?url=http://topic.csdn.net%2Fu%2F20090819%2F01%2F924a04fd-6932-4057-9698-6c9e27ab6749.html
http://hi.csdn.net/link.php?url=http://topic.csdn.net%2Fu%2F20090819%2F01%2F924a04fd-6932-4057-9698-6c9e27ab6749.html
#3
就是AJAX就行了
#4
是啊 用ajax每间隔几毫秒读取一下数据就可以了
#5
learn
#6
用ajax每间隔几毫秒读取一下数据就可以了///
这还是刷新啊。。。。
这还是刷新啊。。。。
#7
学习了。
#8
路过,
不懂ajax ,初学php,
不懂ajax ,初学php,
#9
conet
#11
路过!!
#12
这个可以,不过有点不合理,可以搜下 Server Plush 技术。
#13
google->comet
(1)客户端ajax发送请求->(2)成功回调函数->(1)客户端ajax发送请求
基本上客户端是轮询的模型,不同的是,并不是由客户端不停发送请求,而是发送请求后,php server端检查没任何数据刷新的情况下要hold住请求(使用while循环),while循环里检测数据是否刷新,一旦发生数据刷新,就马上退出while循环,返回数据给客户端,客户端这时候才再次发送请求。
(1)客户端ajax发送请求->(2)成功回调函数->(1)客户端ajax发送请求
基本上客户端是轮询的模型,不同的是,并不是由客户端不停发送请求,而是发送请求后,php server端检查没任何数据刷新的情况下要hold住请求(使用while循环),while循环里检测数据是否刷新,一旦发生数据刷新,就马上退出while循环,返回数据给客户端,客户端这时候才再次发送请求。
#14
关注!
#15
ajax就行了
#16
comet 我在看
不过AJAX 似乎不行
除非刷新
不过AJAX 似乎不行
除非刷新
#17
ajax可以借用框架, 要不你真是晕了
#18
socket
#19
传说中的comet
#20
ajax 就行了.是你不懂ajax,它不用刷新.
#21
这样吗?
是没有刷新网页 但是他重新发送了请求 和刷新没有区别
是没有刷新网页 但是他重新发送了请求 和刷新没有区别
function fs(){
var ajax = cajax();
function ready(){
if(ajax.readyState==4){
var str=ajax.responseText;
if(str)
document.getElementById("xsh").value=str;
document.getElementById("shr").innerHTML="";
document.getElementById("xsh").scrollTop=document.getElementById("xsh").scrollTop+50;}
}
ajax.open("post","ajaxobj.php?text=laile",true);
var yunstr=document.getElementById("shr").innerHTML;
ajax.onreadystatechange=ready;
yunstr=yunstr.replace(/</g,"<");
yunstr=yunstr.replace(/>/g,">");
post="te="+yunstr;
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.send(post);
document.getElementById("shr").innerHTML="";
}
function f5(){
var xhr2 = cajax();
function ready1(){
if( xhr2.readyState==4)
document.getElementById("xsh").value=xhr2.responseText;
document.getElementById("xsh").scrollTop=document.getElementById("xsh").scrollTop+500;
}
xhr2.open("post","ajaxobj.php?get2=f5",true);
xhr2.onreadystatechange=ready1;
xhr2.send(null);
}
function ms(){
if(document.getElementById("ck0").checked){
if( window.event.keyCode==13){
document.getElementById("13").click();
return false;
}}
else{
if(event.ctrlKey && window.event.keyCode==13){
document.getElementById("13").click();
return false;
}}
}
setInterval ("f5()",1000);
#22
看见代码就晕
#23
一般还是用刷新方法的,B/S模式下的 server 端根本没有办法主动推送。
上面说的comet我第一次听说,感觉不错,但是对于一些虚拟主机限制IIS连接的就不适用了,而且每个人占用一个连接,长期不释放,不知道会不会占用系统资源
上面说的comet我第一次听说,感觉不错,但是对于一些虚拟主机限制IIS连接的就不适用了,而且每个人占用一个连接,长期不释放,不知道会不会占用系统资源
#24
如果还是不清楚的我这有个很简单的例子
#25
客户端用flash socket 服务端 java socket or c# socket 这样是比较简单的
#26
24楼给我个简单的例子吧 我看看 我刚下了个稍微复杂点的例子 关键是他用了prototype.js 我不了解。。
#27
index.html 记得加载JQUERY.JS
<script src="jquery.js"></script>
<script type="text/javascript">
<!--
window.onload = function() {
getMsg(0);
}
function getMsg(time) {
$.post("back.php", {'timestamp': time ,"num":Math.random()}, function(data) {
var json = eval('('+ data +')');
document.getElementById("txt").innerHTML += json.msg+'<br>';
getMsg(json.timestamp);
});
}
function send() {
var v = document.getElementById('msg').value;
$('#msg').val('');
$.post("back.php", {'msg': v ,"num":Math.random()}, function(data) {
});
}
//-->
</script>
<div id="txt" ></div>
<input type="text" id="msg"><input type="button" value="Send" onclick="send()">
back.php
<?php
set_time_limit(0);
ob_end_clean();
$file = dirname(__FILE__). '/data.txt';
if(!empty($_REQUEST['msg'])){
file_put_contents($file, $_REQUEST['msg']);
die('Write');
}
$lastmodif = isset($_REQUEST['timestamp']) ? intval($_REQUEST['timestamp']) : 0;
$currentmodif = filemtime($file);
while($currentmodif <= $lastmodif ){
sleep(2);
clearstatcache();
$currentmodif = filemtime($file);
}
$response = array();
$response['msg'] = file_get_contents($file);
$response['timestamp'] = $currentmodif;
$response['lasttime'] = $lastmodif;
echo json_encode($response);
flush();
?>
另外新建data.txt文件
<script src="jquery.js"></script>
<script type="text/javascript">
<!--
window.onload = function() {
getMsg(0);
}
function getMsg(time) {
$.post("back.php", {'timestamp': time ,"num":Math.random()}, function(data) {
var json = eval('('+ data +')');
document.getElementById("txt").innerHTML += json.msg+'<br>';
getMsg(json.timestamp);
});
}
function send() {
var v = document.getElementById('msg').value;
$('#msg').val('');
$.post("back.php", {'msg': v ,"num":Math.random()}, function(data) {
});
}
//-->
</script>
<div id="txt" ></div>
<input type="text" id="msg"><input type="button" value="Send" onclick="send()">
back.php
<?php
set_time_limit(0);
ob_end_clean();
$file = dirname(__FILE__). '/data.txt';
if(!empty($_REQUEST['msg'])){
file_put_contents($file, $_REQUEST['msg']);
die('Write');
}
$lastmodif = isset($_REQUEST['timestamp']) ? intval($_REQUEST['timestamp']) : 0;
$currentmodif = filemtime($file);
while($currentmodif <= $lastmodif ){
sleep(2);
clearstatcache();
$currentmodif = filemtime($file);
}
$response = array();
$response['msg'] = file_get_contents($file);
$response['timestamp'] = $currentmodif;
$response['lasttime'] = $lastmodif;
echo json_encode($response);
flush();
?>
另外新建data.txt文件
#28
哇靠,10L的好东西,研究一下
#29
用框架,隐式刷新!不然用户还在输入的内容就刷没了!
#1
服务推, 或flex
#2
我以前问过同样的问题
http://hi.csdn.net/link.php?url=http://topic.csdn.net%2Fu%2F20090819%2F01%2F924a04fd-6932-4057-9698-6c9e27ab6749.html
http://hi.csdn.net/link.php?url=http://topic.csdn.net%2Fu%2F20090819%2F01%2F924a04fd-6932-4057-9698-6c9e27ab6749.html
#3
就是AJAX就行了
#4
是啊 用ajax每间隔几毫秒读取一下数据就可以了
#5
learn
#6
用ajax每间隔几毫秒读取一下数据就可以了///
这还是刷新啊。。。。
这还是刷新啊。。。。
#7
学习了。
#8
路过,
不懂ajax ,初学php,
不懂ajax ,初学php,
#9
conet
#10
你看看这个行不行,可以研究一下啊,在线客服网页聊天的,
http://blog.csdn.net/yw1386/archive/2009/12/14/5006228.aspx
#11
路过!!
#12
这个可以,不过有点不合理,可以搜下 Server Plush 技术。
#13
google->comet
(1)客户端ajax发送请求->(2)成功回调函数->(1)客户端ajax发送请求
基本上客户端是轮询的模型,不同的是,并不是由客户端不停发送请求,而是发送请求后,php server端检查没任何数据刷新的情况下要hold住请求(使用while循环),while循环里检测数据是否刷新,一旦发生数据刷新,就马上退出while循环,返回数据给客户端,客户端这时候才再次发送请求。
(1)客户端ajax发送请求->(2)成功回调函数->(1)客户端ajax发送请求
基本上客户端是轮询的模型,不同的是,并不是由客户端不停发送请求,而是发送请求后,php server端检查没任何数据刷新的情况下要hold住请求(使用while循环),while循环里检测数据是否刷新,一旦发生数据刷新,就马上退出while循环,返回数据给客户端,客户端这时候才再次发送请求。
#14
关注!
#15
ajax就行了
#16
comet 我在看
不过AJAX 似乎不行
除非刷新
不过AJAX 似乎不行
除非刷新
#17
ajax可以借用框架, 要不你真是晕了
#18
socket
#19
传说中的comet
#20
ajax 就行了.是你不懂ajax,它不用刷新.
#21
这样吗?
是没有刷新网页 但是他重新发送了请求 和刷新没有区别
是没有刷新网页 但是他重新发送了请求 和刷新没有区别
function fs(){
var ajax = cajax();
function ready(){
if(ajax.readyState==4){
var str=ajax.responseText;
if(str)
document.getElementById("xsh").value=str;
document.getElementById("shr").innerHTML="";
document.getElementById("xsh").scrollTop=document.getElementById("xsh").scrollTop+50;}
}
ajax.open("post","ajaxobj.php?text=laile",true);
var yunstr=document.getElementById("shr").innerHTML;
ajax.onreadystatechange=ready;
yunstr=yunstr.replace(/</g,"<");
yunstr=yunstr.replace(/>/g,">");
post="te="+yunstr;
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.send(post);
document.getElementById("shr").innerHTML="";
}
function f5(){
var xhr2 = cajax();
function ready1(){
if( xhr2.readyState==4)
document.getElementById("xsh").value=xhr2.responseText;
document.getElementById("xsh").scrollTop=document.getElementById("xsh").scrollTop+500;
}
xhr2.open("post","ajaxobj.php?get2=f5",true);
xhr2.onreadystatechange=ready1;
xhr2.send(null);
}
function ms(){
if(document.getElementById("ck0").checked){
if( window.event.keyCode==13){
document.getElementById("13").click();
return false;
}}
else{
if(event.ctrlKey && window.event.keyCode==13){
document.getElementById("13").click();
return false;
}}
}
setInterval ("f5()",1000);
#22
看见代码就晕
#23
一般还是用刷新方法的,B/S模式下的 server 端根本没有办法主动推送。
上面说的comet我第一次听说,感觉不错,但是对于一些虚拟主机限制IIS连接的就不适用了,而且每个人占用一个连接,长期不释放,不知道会不会占用系统资源
上面说的comet我第一次听说,感觉不错,但是对于一些虚拟主机限制IIS连接的就不适用了,而且每个人占用一个连接,长期不释放,不知道会不会占用系统资源
#24
如果还是不清楚的我这有个很简单的例子
#25
客户端用flash socket 服务端 java socket or c# socket 这样是比较简单的
#26
24楼给我个简单的例子吧 我看看 我刚下了个稍微复杂点的例子 关键是他用了prototype.js 我不了解。。
#27
index.html 记得加载JQUERY.JS
<script src="jquery.js"></script>
<script type="text/javascript">
<!--
window.onload = function() {
getMsg(0);
}
function getMsg(time) {
$.post("back.php", {'timestamp': time ,"num":Math.random()}, function(data) {
var json = eval('('+ data +')');
document.getElementById("txt").innerHTML += json.msg+'<br>';
getMsg(json.timestamp);
});
}
function send() {
var v = document.getElementById('msg').value;
$('#msg').val('');
$.post("back.php", {'msg': v ,"num":Math.random()}, function(data) {
});
}
//-->
</script>
<div id="txt" ></div>
<input type="text" id="msg"><input type="button" value="Send" onclick="send()">
back.php
<?php
set_time_limit(0);
ob_end_clean();
$file = dirname(__FILE__). '/data.txt';
if(!empty($_REQUEST['msg'])){
file_put_contents($file, $_REQUEST['msg']);
die('Write');
}
$lastmodif = isset($_REQUEST['timestamp']) ? intval($_REQUEST['timestamp']) : 0;
$currentmodif = filemtime($file);
while($currentmodif <= $lastmodif ){
sleep(2);
clearstatcache();
$currentmodif = filemtime($file);
}
$response = array();
$response['msg'] = file_get_contents($file);
$response['timestamp'] = $currentmodif;
$response['lasttime'] = $lastmodif;
echo json_encode($response);
flush();
?>
另外新建data.txt文件
<script src="jquery.js"></script>
<script type="text/javascript">
<!--
window.onload = function() {
getMsg(0);
}
function getMsg(time) {
$.post("back.php", {'timestamp': time ,"num":Math.random()}, function(data) {
var json = eval('('+ data +')');
document.getElementById("txt").innerHTML += json.msg+'<br>';
getMsg(json.timestamp);
});
}
function send() {
var v = document.getElementById('msg').value;
$('#msg').val('');
$.post("back.php", {'msg': v ,"num":Math.random()}, function(data) {
});
}
//-->
</script>
<div id="txt" ></div>
<input type="text" id="msg"><input type="button" value="Send" onclick="send()">
back.php
<?php
set_time_limit(0);
ob_end_clean();
$file = dirname(__FILE__). '/data.txt';
if(!empty($_REQUEST['msg'])){
file_put_contents($file, $_REQUEST['msg']);
die('Write');
}
$lastmodif = isset($_REQUEST['timestamp']) ? intval($_REQUEST['timestamp']) : 0;
$currentmodif = filemtime($file);
while($currentmodif <= $lastmodif ){
sleep(2);
clearstatcache();
$currentmodif = filemtime($file);
}
$response = array();
$response['msg'] = file_get_contents($file);
$response['timestamp'] = $currentmodif;
$response['lasttime'] = $lastmodif;
echo json_encode($response);
flush();
?>
另外新建data.txt文件
#28
哇靠,10L的好东西,研究一下
#29
用框架,隐式刷新!不然用户还在输入的内容就刷没了!