2015-02-03 2 views
0

Я делаю запрос POST на сервер nodejs, который содержит только имя файла в теле. После получения запроса узел загружает соответствующий локальный файл в ведро Amazon S3. Иногда файлы иногда могут загружаться, а иногда и время запроса. Как я могу удлинить или предотвратить тайм-аут?Предотвратить тайм-аут запроса на отправку сообщений

ответ

2

Вы можете отправить ответ обратно в браузер, пока продолжаете работать над загрузкой. Вам не нужно ждать завершения загрузки до завершения ответа. Например, вы можете сделать:

res.end("done"); // or put whatever HTML you want in the response 

И это закончит ответ на сообщение, и браузер будет счастлив. Тем временем ваш сервер продолжает завершать загрузку.

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

Тайм-аут сам контролируется браузером. Это не то, что вы можете напрямую контролировать с сервера. Если вы постоянно отправляете данные в браузер, это скорее всего не будет таймаутом. Таким образом, до тех пор, как загрузка продолжается, вы могли бы сделать что-то вроде этого:

res.write(" "); 

каждые 15 секунд или около того как своего рода Keep-Alive, который держит браузер счастливым и держит его от тайм-аута. Вы, вероятно, установили бы интервал таймера на 15 секунд, чтобы выполнить небольшую отправку данных, а затем, когда загрузка закончится, вы остановите таймер.


Если вы контролируете Javascript в браузере, который делает запись, то вы можете установить значение тайм-аута на вызов Ajax с Javascript в браузере. Когда вы создаете объект XMLHttpRequest в браузере, он имеет свойство timeout, которое вы можете установить для асинхронных вызовов ajax. См. MDN для получения дополнительной информации.