andysern 2016-09-01 09:56 采纳率: 6.3%
浏览 1303

AJAX长连接的服务器线程问题

正在学习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;  
    }

}

请大家帮忙看看,如何加了线程让客户端良好运行呢你?
  • 写回答

2条回答 默认 最新

  • threenewbee 2016-09-01 12:51
    关注

    主线程要保持住,主线程如果退出了,那么进程结束了,子线程也就结束了。

    评论

报告相同问题?

悬赏问题

  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化