исключение tomcat socketTimeout - PullRequest
1 голос
/ 21 января 2010

Я моделирую загрузку ajax-файла с использованием iframe, запрос идет к приложению tomcat (сервлет) для загрузки файла, который занимает много времени (может занять более 1 минуты), проблема в том, что через определенное время либо tomcat, либо клиент браузера разрывает соединение. см. исключение Tomcat ниже. кто его прекращает, клиент или сервер? Есть ли способ увеличить время ожидания?

var iframe = document.createElement("iframe");

iframe.src="http://xxxxxxxxx?";
Caused by: ClientAbortException:  java.net.SocketException: Broken pipe
        at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
        at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
        at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349)
        at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
        at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
        at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
        at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:83)
        at org.apache.poi.poifs.storage.BigBlock.doWriteData(BigBlock.java:55)
        at org.apache.poi.poifs.storage.DocumentBlock.writeData(DocumentBlock.java:220)
        at org.apache.poi.poifs.storage.BigBlock.writeBlocks(BigBlock.java:86)
        at org.apache.poi.poifs.filesystem.POIFSDocument$BigBlockStore.writeBlocks(POIFSDocument.java:603)
        at org.apache.poi.poifs.filesystem.POIFSDocument.writeBlocks(POIFSDocument.java:275)
        at org.apache.poi.poifs.filesystem.POIFSFileSystem.writeFilesystem(POIFSFileSystem.java:390)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1168)
        at net.sf.jasperreports.engine.export.JRXlsExporter.closeWorkbook(JRXlsExporter.java:199)
        ... 17 more
Caused by: java.net.SocketException: Broken pipe
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)

1 Ответ

1 голос
/ 21 января 2010

Исключение, которое вы видите, вызвано тайм-аутом клиента и закрытием соединения.

Для долго выполняющихся запросов типичным примером является первоначальный запрос на попадание на сервер для запуска какого-либо долго выполняющегося фрагмента работы. Например, вы можете поместить сообщение в MDB для создания PDF. Затем сервлет отправляет клиенту ответ 202 Accepted с новым URL, предназначенным для опроса. Затем клиент должен продолжить опрос нового URL-адреса, пока ресурс не станет доступен. Это требует немного JavaScript, и некоторые сайты будут иметь индикатор выполнения, пока клиент опрашивает, чтобы увидеть, доступен ли ресурс.

Если вы не предоставляете отзыв клиенту, он обычно нажимает кнопку «Стоп» и через некоторое время обновляет страницу. Это может усугубить ситуацию, если вы попытаетесь выполнить большую операцию для каждого из этих запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...