Ajax 질문 있어요.

조회수 2899회

jquery-1.8.2.min.js:2 GET http://localhost:8080/api/trmnlInfoColctToFile.do?imei=A2&phoneSerial=testS…=lte&androidVersion=1.1&swVersion=aa_f10_1212&extra=extra1&_=1461227407494 net::ERR_CONNECTION_RESET

에러는 위랑 같습니다.

제가 브라우저 단에서 반복문 안에 ajax로 비동기 통신 1000번 수행합니다. 서버를 키고 처음 천번 돌리면 수행안된 5번의 request 상태는 pending 됩니다. 두번째 부터는 1000번 요청 수행 다 되고요.

현재 고객이 보내는 데이터를 파일로 저장 중이라 5개 요청까지도 다 받아야 하거든요.

이건 어디 문제인가요? 톰캣 문제인가요? 아니면 ajax 문제인가요.

브라우저단 코드 입니다

<script type="text/javascript">
var i=0;

function testfunction(){
    var testid = $("#Bid").val();
    if(testid==""){
        alert("아이디 입력 해주세요.");
        return;
    }
    //http://localhost:8080/api/trmnlInfoColctToFile.do?imei=testIMEI3&phoneSerial=testSerial1&phoneModel=testModel1&phoneUptime=1:1:1&lineNumber=01000010001&pttNumber=1|123*456&networkName=lg&networkType=lte&androidVersion=1.1&swVersion=aa_f10_1212&extra=extra1
    var i=0;

    while(i!=1000){
        var myurl = "http://localhost:8080/api/trmnlInfoColctToFile.do?imei="+testid+i+"&phoneSerial=testSerial1&phoneModel=testModel1&phoneUptime=1:1:1&lineNumber=01000010001&pttNumber=1|123*456&networkName=lg&networkType=lte&androidVersion=1.1&swVersion=aa_f10_1212&extra=extra1";

        $.ajax({
               type: 'GET',
               url: myurl,
               cache: false,
               success: function(data) {
                    console.log("성공"+data);
               },
               error: function(xhr) {
                   console.log("Error: " + xhr.statusText);
               }
        });
        i++;
    }
    console.log("종료");
}
</script>

비즈니스 단 코드 입니다.

public synchronized  void trmnlInfoColctToFile(){
    try{
        if(check==false){
            wait();
            check=true;
        }
        check = false;
        System.out.println("수행"+ exc++);
        String Time = new SimpleDateFormat("yyyyMMddHHmmss").format(Calendar.getInstance().getTime());
        StringBuffer sb = new StringBuffer();

        sb.append(((TrmnlinfoColctVo)vo).getImei() == null ? "" : ((TrmnlinfoColctVo)vo).getImei());
        sb.append(",").append(((TrmnlinfoColctVo)vo).getPhoneSerial() == null ? "" : ((TrmnlinfoColctVo)vo).getPhoneSerial());
        sb.append(",").append(((TrmnlinfoColctVo)vo).getPhoneModel() == null ? "" : ((TrmnlinfoColctVo)vo).getPhoneModel());
        sb.append(",").append(((TrmnlinfoColctVo)vo).getPhoneUptime() == null ? "" : ((TrmnlinfoColctVo)vo).getPhoneUptime());
        sb.append(",").append(((TrmnlinfoColctVo)vo).getLineNumber() == null ? "" : ((TrmnlinfoColctVo)vo).getLineNumber());
        sb.append(",").append(((TrmnlinfoColctVo)vo).getPttNumber() == null ? "" : ((TrmnlinfoColctVo)vo).getPttNumber());
        sb.append(",").append(((TrmnlinfoColctVo)vo).getNetworkName() == null ? "" : ((TrmnlinfoColctVo)vo).getNetworkName());
        sb.append(",").append(((TrmnlinfoColctVo)vo).getNetworkType() == null ? "" : ((TrmnlinfoColctVo)vo).getNetworkType());
        sb.append(",").append(((TrmnlinfoColctVo)vo).getAndroidVersion() == null ? "" : ((TrmnlinfoColctVo)vo).getAndroidVersion());
        sb.append(",").append(((TrmnlinfoColctVo)vo).getSwVersion() == null ? "" : ((TrmnlinfoColctVo)vo).getSwVersion());
        sb.append(",").append(((TrmnlinfoColctVo)vo).getExtra() == null ? "" : ((TrmnlinfoColctVo)vo).getExtra());

        String fileName = Time.substring(0, 10)+".req";
        File AbsolPath = new File(fileName);
        String Mypath = AbsolPath.getAbsolutePath();
        Mypath = Mypath.substring(0,Mypath.lastIndexOf("\\")); // 이클립스 폴더로
        Mypath = Mypath.substring(0,Mypath.lastIndexOf("\\")); // tools 폴더로
        Mypath = Mypath.substring(0,Mypath.lastIndexOf("\\")); // 프로젝트 폴더로
        Mypath = Mypath+"\\workspace\\KtpOta\\WebContent\\data\\ing";
        //통신 테스트
        File testPath = new File(Mypath+"\\"+((TrmnlinfoColctVo)vo).getImei());
        FileWriter tfw = null;
        tfw = new FileWriter(testPath, true);
        tfw.write(sb.toString()+"\n");
        tfw.close();

        File myPath = new File(Mypath);
        //디렉토리 없을 경우 생성
        if(!myPath.exists()){
            myPath.mkdirs(); 
        }
        File myFilePath = new File(Mypath+"\\"+fileName);

        FileWriter fw = null;
        if(myFilePath.isFile()){
            fw = new FileWriter(myFilePath, true);
            fw.write(sb.toString()+"\n");
            fw.flush();
            fw.close();
        }else{
            fw = new FileWriter(myFilePath, false);
            fw.write(sb.toString()+"\n");
            fw.flush();
            fw.close();
        }

        if(check==false){
            check = true;
            notify();
        }
    }catch(Exception e){
        System.out.println("처리실패"+e);
    }
}
  • ajax가 반복문 안에 있는 데 3번 반복이상수터 pending 상태가 나타나네요.. 왜 이럴까요. 반복문이 끝나고 ajax마저 끝나버리나요? 김은찬 2016.4.21 17:45
  • 서버에 반복적으로 요청하는 것보다 묶어서 한번에 요청하는게 좋을 텐데요? 허대영(소프트웨어융합대학) 2016.4.21 20:41

2 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)