Я загрузил свое приложение на Heroku.
Поскольку одна функция занимает много времени, ответ не отправляется в течение некоторого количества минут.
Между тем, Heroku выдает ошибку тайм-аута (ошибка H12) после 30 секунд отсутствия ответа.
Я пытаюсь решить эту проблему, но она становится все более сложной, с socket.io и т. д.
Существуют ли провайдеры, которые не выдадут эту ошибку и позволят клиенту ждать бесконечно?
Вероятно, это связано с вашим другим вопросом, в котором вы также не включаете достаточный контекст кода: stackoverflow.com/questions/52346849/…
на самом деле я попытался установить некоторые заголовки, чтобы увидеть, будет ли heroku считать это ответом, но это не сработало. Что означает запись одного байта? Проблема заключается в HTTP, вы не можете отправить два ответа на один запрос. Я отвечал с помощью html-файла, а затем отправлял текстовый файл, но получил ошибку НЕВОЗМОЖНО ОТПРАВИТЬ ЗАГОЛОВКИ ПОСЛЕ ОНИ ОТПРАВЛЯЮТСЯ. Итак, как эта запись байта может работать периокально? Где ты это пишешь?
Пожалуйста, избегайте ненормативной лексики здесь. Я понимаю, что вы расстроены, но проклятия не решат вашу проблему.
Кроме того, не по теме просить нас найти или порекомендовать сторонний ресурс, например веб-хостинг. То, о чем вы спрашиваете жестяная банка, - это код, который так долго отправляет ответ. Если вы поделитесь этим с нами, мы сможем помочь вам найти хорошее решение этой проблемы. Не так много ситуаций, когда приемлемо ждать ответа от сервера более 30 секунд. Почему это длится так долго?
ДО того, как вы отправили запрос, но после того, как вы установили какие-либо заголовки, вы можете сделать res.write(" ") для периодической записи байта в ответ, чтобы поддерживать keroku в живых. Насколько это практично в вашем конкретном случае, я понятия не имею, потому что вы не показываете реальный контекст проблемы, которую пытаетесь решить.
Вместо того, чтобы найти нового провайдера, который позволит вам позволить клиенту посидеть несколько минут, почему бы вам не отправить эту работу на фоновый процесс? Вы по-прежнему можете использовать Heroku, это более простое в реализации решение, которое не заставляет пользователей сидеть и барабанить пальцами в течение нескольких минут.
@Chris Спасибо, Крис. Но код, который занимает так много времени, не является ошибкой. Это занимает много времени, потому что он обрабатывает много данных.
@ jfriend00 Спасибо! Если это станет решением, пришлите мне свой PayPal, и я куплю вам пива!
@BradleyJohnson По завершении задания клиент отправляет текстовый файл в ответ. Как это может с этим работать? На сервере Heroku нет фактического сохранения файлов, я просто устанавливаю несколько тегов, беру массив из памяти и использую его как текстовый файл.
@ user1584421, я не говорю, что вы не можете обрабатывать много данных. Я говорю, что прося браузер (и пользователя) дождаться этих данных синхронно,, вероятно, неправильный способ справиться с этим. Поставьте задание в очередь и обработайте его асинхронно или быстро загрузите страницу и используйте WebSockets или веб-воркеров или что-то еще, чтобы отправить данные в браузер, когда он будет готов, длинный опрос, черт возьми, даже используйте jQuery для проверки связи с сервером каждые 30 секунд ... Это также что предлагает Брэдли Джонсон.
Это то, что я сейчас пытаюсь сделать с помощью socket.io. Хотя я не знал, что jquery может это сделать.





Вот что об этом говорит Heroku: devcenter.heroku.com/articles/request-timeout. Вы застряли на 30 секундах, если не напишите в ответ хоть один байт, чтобы он оставался в живых. Обращение к другим поставщикам было бы не по теме переполнения стека, поскольку это не проблема программирования, и он запрашивает рекомендации по стороннему сервису - оба из которых делают это вне темы здесь.