正在学习AJAX的长连接的问题
在客户端用ajax去实现连接
$.ajax({
url: '/ajax',
type: 'GET',
data: 'what=test',
timeout: 30000,
//请求成功后触发
success: function (data) {
clock = clock+1;
show.prepend('success invoke!' +data+'
');
switch(data){
case "error data":
//RevServer();
break;
case "ok":
RevServer();
break;
default:
}
},
//请求失败遇到异常触发
error: function (xhr, errorInfo, ex) {
clockErr = clockErr+1;
show.prepend('error invoke!errorInfo:'+ errorInfo+"次数"+clockErr+'<br/>');
RevServer();
},
//完成请求后触发。即在success或error触发后触发
complete: function (xhr, status) {
show.prepend('complete invoke! status:' + status+",次数"+clock+'<br/>');
//RevServer();
}
现在出现一个问题,服务器端我之前是用while直接循环,但是好像多几次后就会使服务器产生异常。然后就往while里加了一个thread,但是这样一样,客户端就失效了,直接
进入了complete,如果不加thread就会一直处在连接中,加了线程连接就直接结束了。
switch(what){
case "test":
Thread test = new Thread(new Runnable(){//这里加了线程后,客户端就结束了
public void run(){
while(a){
if(session.getAttribute("status")=="ok")a=false;
}
out.print("收到你的消息");
a = true;
session.setAttribute("status","nothing");
}
});
test.start();
break;
case "setStatus":
session.setAttribute("status","ok");
break;
}
}
不加线程,就会比较好的运行。(不过感觉性能有问题)
switch(what){
case "test":
while(a){
if(session.getAttribute("status")=="ok")a=false;
}
out.print("收到你的消息");
a = true;
session.setAttribute("status","nothing");
}
break;
case "setStatus":
session.setAttribute("status","ok");
break;
}
}
请大家帮忙看看,如何加了线程让客户端良好运行呢你?