Я запускаю набор экземпляров торнадо, который обрабатывает множество запросов из небольшого набора соединений keep-alive. Когда я сниму сервер для обслуживания, я хочу изящно закрыть запросы keep-alive, чтобы я мог снять сервер. Есть ли способ сказать клиентам «Эй, этот сокет закрывается» с помощью Tornado? Я огляделся, и self.finish()
просто сбрасывает соединение.Закройте все (продолжите) гнездовые соединения в торнадо?
ответ
finish()
здесь не применяется, потому что соединение в состоянии «keep-alive» не связано с RequestHandler
. В общем, вы ничего не можете (или должны) делать с подключением keep-alive, за исключением закрытия, поскольку браузер не прослушивает ответ.
Websockets - это еще одна история - в этом случае вы можете закрыть свои соединения перед тем, как закрыть (но не обязательно), ваши клиенты должны быть надежными против того, что соединение просто уходит).
В конце концов, я попал на решение для вида грациозной остановки мне нужно (обратите внимание, что это может только работа с Tornado 3.2, так как это зависит от запроса, имеющего подключение и проверка атрибута no_keep_alive
. В конечном счете, нет необходимости закрывать соединение, если это не активно отправляет данные (так бродячие существующие соединения не имеет никакого значения).
- Я создал переменную на приложение, которое отмечает ли приложение завершает работу.
- В
initialize()
Я проверяю это, и если мы закрываем, я устанавливаю t его заголовокConnection: close
, чтобы выполнить RFC, а затем установитьself.request.connection.no_keep_alive = True
, чтобы заставить соединение закрыться, прежде чем читать какие-либо данные, но после завершения запроса.
Относительно просто - выглядит примерно так:
class GracefulRequestHandler(tornado.web.RequestHandler):
def initialize(self):
if self.application.is_shutting_down:
self.set_header('Connection', 'close')
self.request.connection.no_keep_alive = True
- 1. DBCP Закройте все открытые соединения
- 2. параллельные соединения в торнадо
- 3. Закройте соединения OPC DA
- 4. Закройте все вкладки TabPane
- 5. Закройте все открытые элементы
- 6. Закройте все вкладки слева
- 7. Закройте все аккордеоны бутстрапа
- 8. Закройте все процессы
- 9. Закройте все всплывающие окна
- 10. Закройте все файлы в папке
- 11. Закройте соединения с базой данных после неактивности
- 12. гнездовые словари
- 13. Закройте все дочерние потоки WPF
- 14. Закройте все открытые теги xml
- 15. Закройте все фигуры, порожденную петлей
- 16. Закройте все дочерние окна Java
- 17. Закройте все открытые окна сценария
- 18. Закройте все скрытые/невидимые окна
- 19. Торнадо - «Глобальные переменные» в торнадо?
- 20. Закройте все открытые файлы в ipython
- 21. Закройте все файлы в общей папке
- 22. Закройте все окна ANOVA в MATLAB
- 23. Закройте все буферы, кроме текущего, в Emacs
- 24. Закройте все темы в многопоточной программе
- 25. Закройте все действия в андроидном приложении?
- 26. Закройте все всплывающие окна в jQuery mobile
- 27. Закройте все окна инструментов в Visual Studio?
- 28. Multi-гнездовые UI-просмотров
- 29. ExtJs и гнездовые модели
- 30. Изменение гнездовые словари
я получаю, что около 'конца()', что мне нужно сделать на объект Application, чтобы закрыть соединение? Я понимаю, что это не огромная проблема, которая просто внезапно закрывается, но мне интересно, есть ли способ дать указание торнадо закрыть все открытые соединения. –
В настоящее время не существует способа закрыть все открытые соединения, кроме как отключив процесс. –
Хорошо, спасибо - вот ответ, который я искал :) –