Что происходит на сервере, когда клиент закрывает соединение с API с помощью readTimeout. Будет выполнено выполнение для запроса или он будет разорван, как только тайм-аут происходит, или выполнение завершается, и поток ответа забивается с ответом, который сервер должен отправить пользователюЧто происходит на сервере, когда клиент закрывает соединение с помощью readTimeout
ответ
Тайм-аут - это неопрятный способ закрыть соединение - когда ваша сторона соединения заканчивается, есть хорошие шансы на то, что вы не смогут сказать другой стороне, на которую вы рассчитали время, и закрываете соединение. То есть соединение не формально закрыто согласованным действием с обеих сторон, это только одна сторона, решившая, что будет считать его мертвым.
Способ устранения: есть тайм-ауты с обеих сторон соединения - если одна сторона отключается, другая сторона также будет таймаутом.
Что касается того, что именно происходит на стороне сервера: Поскольку сервер не знает, связь мертва до тех пор, пока не истечет его собственный тайм-аут, он будет рассматривать соединение хорошо, и, как правило, обрабатывает запрос и попытку напишите ответ. Вероятно, будет некоторая буферизация ответа, поэтому попытка написать ответ может даже показаться работать на сервере.
Когда и если сервер пытается записать достаточное количество данных для ответа, чтобы заполнить возможный буфер, он будет блокироваться, а затем, когда произойдет тайм-аут, будет выбрано исключение, что позволит серверу узнать, что время ожидания соединения завершено.
Если сервер не заполняет буфер своим ответом, то такое же (блокирование, а затем исключение) должно произойти, когда оно пытается закрыть соединение (но это может произойти за пределами вашего приложения, в коде контейнера сервера приложений).
Если вы случайно попытаетесь написать ответ после того, как тайм-аут уже произошел, вы должны немедленно получить исключение.
Так что же происходит на сервере во многом зависит от вашего собственного кода:
- Если вы только написать ответ после выполнения всех связанных действий, они будут выполнены
- Если вы перемешиваетесь бизнес-логика и писать ответ , некоторая логика может выполняться или не выполняться (в зависимости от того, сколько данных вы уже написали в ответ и в какое время), и нет хорошего способа оценить, что произойдет
В любом случае, сервер будет наглядно узнать, что произошло таймаут, но я не уверен, что ваше приложение всегда получит эту информацию.
Что происходит на сервере, когда клиент закрывает соединение с API с помощью readTimeout.
То же, что и в случае, если клиент закрывается по любой другой причине. Сервер продолжит выполнение запроса, удастся записать первую часть ответа и может получить ошибку «сброса соединения» при записи остальных, если есть отдых, и в зависимости от времени и времени ответа и т. Д. ,
Будет ли выполнение для запроса будет сделано
Да.
или он сломается, как только возникает тайм-аут
No.
ИЛИ исполнение завершат
Да.
и поток ответа забивается с ответом, что сервер предполагается отправить пользователю
Да, но это будет в конечном итоге привести к «сброс соединения» на сервере.
- 1. Что делает Hadoop с нереплицированными данными, когда клиент закрывает соединение?
- 2. Разъем сервера завершается, когда клиент закрывает соединение
- 3. Что происходит на сервере, когда клиент/браузер покидает страницу?
- 4. AS3 AIR - Клиент закрывает соединение
- 5. Почему закрывает мой клиент соединение
- 6. Закрывает ли клиент Джерси соединение с исключением?
- 7. Повторный вызов NetworkStream вызван несколько раз на сервере, когда клиент закрывает соединение.
- 8. Обнаруживать, когда клиент закрывает соединение с обработчиком запросов aiohttp
- 9. BlazeDS StreamingAMF: как определить, когда клиент flex закрывает соединение?
- 10. Клиент Python отключается, если сервер закрывает соединение
- 11. серверного поток прерываний, когда клиент закрывает соединение TCP
- 12. Что происходит, когда НЕ закрывает записи в классическом asp?
- 13. Закрывает ли соединение, когда происходит пауза между HTTP-запросами?
- 14. Джерси 2 клиент не закрывает соединение немедленно
- 15. RabbitMq, клиент закрывает TCP-соединение внезапно
- 16. Что происходит с потоком, когда пользователь закрывает окно браузера?
- 17. когда замок ActiveRecord закрывает соединение
- 18. Python3 на основе WebSocket сервер, клиент закрывает соединение на посыла
- 19. Когда сервер HTTP 1.0 закрывает соединение?
- 20. Что происходит, когда соединение завершается в середине удаленного вызова на удаленном сервере .NET?
- 21. Что происходит, когда загружаемый файл изменяется на сервере?
- 22. Что происходит, когда пользователь закрывает окно для загрузки файлов (JSF)
- 23. Нужно ли клиенту закрывать соединение, когда сервер закрывает соединение
- 24. Что происходит с процедурой pl/sql на сервере базы данных, когда соединение потеряно?
- 25. Клиент JAX-WS закрывает соединение tcp с FIN, ACK
- 26. Почему OutputStream.write() закрывает соединение сокета?
- 27. Bio_free не закрывает соединение
- 28. Когда ODBC закрывает соединение после выполнения SQLFreeHandle?
- 29. PHPMailer не может отправлять электронную почту, клиент закрывает соединение?
- 30. Solr закрывает соединение с Zookeeper
У меня есть два вопроса здесь 1: так что запрос будет полностью выполняться на сервере? 2: будет ли поток потока забиваться откликом? – niks
Тайм-аут чтения на сервере не будет иметь никакого эффекта, поскольку он уже прочитал запрос и занят подготовкой ответа. Если отправка ответа не удалась, сервер немедленно обнаружит это. Это может не закончиться вообще, и тайм-аут записи не поможет, даже если он поддерживается, и это не на всех платформах. – EJP
@EJP Я думаю, что разница в наших мнениях проистекает из различной интерпретации вопроса - я читал его как тайм-аут, происходящий на стороне клиента при чтении ответа, в то время как вы, кажется, читаете его как тайм-аут на стороне сервера при чтении запроса. Это так? –