2014-12-01 3 views
0

Итак, у меня есть программа, которая в основном позволяет двум пользователям общаться друг с другом и делать другие вещи через websocket с конечными точками javascript и java-сервера. Когда один из пользователей нажимает кнопку, у меня есть слушатель, который выдает сообщение другому пользователю, который вызывает функцию. Во время этой функции я хочу иметь возможность вызывать AJAX POST с JQuery для обновления моей базы данных, но это вызывает java.util.concurrent.TimeoutException. Любая идея, почему это происходит? Я предполагаю, что это имеет какое-то отношение к тому факту, что соединение с websocket не остается открытым достаточно долго, чтобы пройти вызов ajax.Выполнение AJAX POST в сообщении websocket вызывает исключения таймаута

Итак, я провел исследование, и я видел, что websocket и AJAX не совсем то, что должно быть смешанным (я думаю). Однако я не могу представить альтернативу даже для обновления моей базы данных. Для этого есть много кода, поэтому я постараюсь только опубликовать важные части.

Вот часть кода для нажатия кнопки (это кнопка согласия, так что оба пользователя должны были нажать ее, поэтому символы «**» и «-»).

 fAgree.addEventListener("click", function() { 
     // selects this button 
     if (aStr == "**" && (yStr == "**" || oStr == "**")) { 
      if (fStr == "--") { 
       fStr = "*-"; 

       //redirect to another page 
      } else if (fStr == "-*") { 
       fStr = "**"; 


      if(secondTransaction == false) { 
        var firstCoordUpload = document.getElementById("yourPos").innerHTML; 
        var secondCoordUpload = document.getElementById("othersPos").innerHTML; 
        var firstLatUpload = parseFloat(firstCoordUpload.split(",")[0]); 
        var firstLonUpload = parseFloat(firstCoordUpload.split(",")[1]); 

        $.ajax({ 
         url: "../../309/T11/setSaleData/" + getURLParameter("saleID") + "/" + firstLatUpload + "/" + firstLonUpload + "/" + firstCoordUpload + "/" + secondCoordUpload + "/" + secondSeller, 
         type: "POST", 
         headers: { 
          "Authorization" : getCredentials(), 
         }, 
         success: function (result) { 
          window.location.href = '../../frontEnd/profilePage/index.html?username='+ getUsername(); 
          console.log(result); 
         }, 
         error: function (dc, status, err) { 
          console.log(err); 
          console.log(status); 
         } 
        });      

      } 



      } 
      agreeBut.socket.send("a,f"); 
      htmlChange(fStr, fStar); 
     } 
    }); 

Вот часть кода, который вызывается в конце кода выше (agreeBut.socket.send()).

agreeBut.socket.onmessage = function(message) { 
    // check [0]: a for agree buttons, 
    // m for map, 
    // l of location buttons, 
    // t for trade 
    var mess = message.data.split(","); 
    if (mess[0] == "a") { 
     // second a shows the agree button was pressed, changes aStr 
     // accordingly and displays 
     if (mess[1] == "a") { 
      if (aStr == "--") { 
       aStr = "-*"; 
      } else if (aStr == "*-") { 
       aStr = "**"; 
      } 
      htmlChange(aStr, aStar); 

      // shows the final agree button has been pressed, changes fStr 
      // accordingly and displays 
     } else if (mess[1] == "f") { 
      if (fStr == "--") { 
       fStr = "-*"; 
       //redirect 
      } else if (fStr == "*-") { 
       fStr = "**"; 

       alert("on this"); 
       if(secondTransaction == true) { 

         alert("doing it"); 
         var firstCoordUpload = document.getElementById("yourPos").innerHTML; 
         var secondCoordUpload = document.getElementById("othersPos").innerHTML; 
         var firstLatUpload = parseFloat(firstCoordUpload.split(",")[0]); 
         var firstLonUpload = parseFloat(firstCoordUpload.split(",")[1]); 

         $.ajax({ 
          url: "../../309/T11/setSaleData/" + getURLParameter("saleID") + "/" + firstLatUpload + "/" + firstLonUpload + "/" + firstCoordUpload + "/" + secondCoordUpload + "/" + secondSeller, 
          type: "POST", 
          headers: { 
           "Authorization" : getCredentials(), 
          }, 
          success: function (result) { 
           console.log(result); 
           alert("Got it"); 
           window.location.href = '../../frontEnd/profilePage/index.html?username='+ getUsername(); 
          }, 
          error: function (dc, status, err) { 
           console.log(err); 
           console.log(status); 
          } 
         });      

       } 



       //window.location.href = '../../frontEnd/profilePage/index.html?username='+ getUsername(); 
      } 
      htmlChange(fStr, fStar); 
     } 

    } 

}; 

ответ

0

Оказалось, что я получаю эту проблему из-за таймаута, установленного на моем сервере JavaEndpoint. В классе я использовал функцию setMaxIdleTimeout (0) в переменной сеанса, чтобы не было времени ожидания простоя. Это, казалось, решило мою проблему (однако я чувствую, что это действительно просто обходной путь для плохой реализации websocket и ajax на моем конце).

Смежные вопросы