Pull to refresh

Comments 15

стандартный томкат комплектуется по умолчанию APR? или нужно допиливать?
Забыл написать, действительно.

В систему нужно дополнительно установить:
— Apache Portable Runtime Library
— Apache Tomcat Native Library

При этом линуксоиды должны обратить внимание, что APR для инициализации во время запуска пытается набрать энтропии из /dev/random, поэтому либо его надо переключить на /dev/urandom, либо настроить /dev/random так, чтобы энтропии хватало для запуска сервера.
спасибо, очень пригодится, не всегда имеет смысл ставить nginx
ИМХО, это тоже самое :)

Статика будет отдана функцией операционной системы sendfile. APR просто предоставляет оболочку для этой функции, которую можно вызвать из сервлета (либо реализует её сам, если такой функции в ОС нет).
да, но в случае с томкатом, это будет нативный вызов через кучу врапперов, что не есть гуд
Мне кажется, обработкой займётся не Tomcat-Java, а Tomcat Native Library, то есть будет без лишних wrapper'ов.

Так как если TNL есть в ClassPath, то обработка идёт HTTP -> TNL -> Java -> TNL -> HTTP
(TNL создаёт свой Thread Pool для Java)
Nginx пользует предварительно выделенную память, пользует epoll/kqueue, в конце концов да, также может использовать sendfile, является FSM заточенным под отдачу статики… Зачем же занимать Thread Pool томката на отдачу статики, если с этим и так прекрасно справляется nginx?.. Мне кажется вполне логичным четко распределять отдачу static и dynamic контента в системе…
Что насчет ограничения доступа к файлу уровнем приложения (файлы из закрытой авторизацией зоны)?..
А ещё можно воспользоваться библиотекой UploadFile от того же Apache. Получится очень неплохой сервлет, сам недавно кодил.
One more pardon, перепутал upload с download.
А с NIO-коннектором к tomcat transferTo тоже не через sendfile работает?
Хм, забавно никто не обратил внимания на самую вопиющую проблему кода, описанного в начале поста — файл будет отдаваться без поддержки докачки.
В данном случае это не принципиально. Ну изменятся стартовые и конечные значения, но основная нагрузка всё равно будет на цикл.

В докачке самое сложное — это распарсить range'ы и корректно их обработать. На это уходит больше строчек кода, чем на саму отдачу :)
Sign up to leave a comment.

Articles