Jeg har en servlet class som extender HttpServlet. Jeg bruger saa getOutputStream til at faa et ServletOutputStream object og det virker ogsaa godt nok. Naar jeg bruger write paa min ServletOutputStream bliver data sendt til clienten men jeg har et problem. Hvis clienten cancler download(Det er binary data) saa laver write ikke nogle IOException som det skal. I stedet virker det som om at write bare ignorere alle data og retunere med det samme. -( Hvorfor det!!!
Brug af AI afslører de svagheder, virksomheder allerede har opbygget gennem års cloud-transformation, nye SaaS-løsninger og fragmenterede sikkerhedssystemer.
Typisk vil du vel ikke have en exception hver gang en bruger trykker stop eller hopper videre til en anden side før hele siden er hentet. Det kunne fylde en log ret hurtigt.
Log?? Jeg havde da tænkt mig selv at catch den exception der kommer. Problemet nu er at serveren tror at clienter stadig er modtager data, saa den bliver med med at lave og sende data -(
Jeg havde selv et lignende problem. Hvis du flusher dit output efter hvert tegn du har sendt til klienten, bliver der genereret en IOException hvis brugeren cancler eller lukker sin browser.
F.eks.: public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException { try { ServletOutputStream out = res.getOutputStream(); res.setContentType(\"text/html\"); // Skriv alle chars ud (0 til 65535) for (int i = 0; i < 65535; i++) { out.print(i); out.flush(); } } catch (IOException ex) { // Fejl: Connection reset by peer: socket write error } }
Hvis brugeren cancler eller lukker browseren mens servletten udskriver ovenstående, throwes der en IOException
Det vil jeg da lige tjekke og saa vende til bage med, men da programmet skal sende filer paa flere hundrede MB er det nok ikke en permenent løsning pga cpu overhead ved alle de flush kald.
At skrive 1 byte af gangen virker i ca 80% af tilfældende, men det gør ogsaa at ydelsen af vores server faldet til 1/10 af hvad den var før, saa jeg har i stedet valgt at omskrive den del af programmet til php.
Det lyder da underligt? En IOException burde opstå hver gang du prøver at sende information til klienten og klienten har lukket sin socket (lige meget om det er 1 eller 100 byte).
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.