Сервлеты Java: Производительность - PullRequest
4 голосов
/ 15 октября 2008

Я работаю над веб-приложением на Java, которое получает данные от сервлетов через вызовы AJAX.

Это приложение имеет несколько элементов страницы, которые получают новые данные с сервера через довольно быстрые интервалы.

При большом количестве пользователей спрос на сервер может стать довольно высоким, поэтому мне любопытно:

Какой подход обеспечивает наилучшую производительность:

Много сервлетов (по одному для каждого типа запроса данных)?

Или:

один сервлет, который может обрабатывать все запросы?

Ответы [ 6 ]

11 голосов
/ 15 октября 2008

Нет причин для производительности иметь более одного сервлета. В веб-приложении мгновенно запускается только один экземпляр класса сервлета, независимо от количества запросов. Запросы не сериализуются, они обрабатываются одновременно, поэтому ваш сервлет должен быть безопасным для потоков.

2 голосов
/ 15 октября 2008

Структура Struts использует один сервлет для всего в вашем приложении. Ваш материал включается в этот один сервлет. Если это работает для них, это, вероятно, будет работать для вас.

1 голос
/ 15 октября 2008

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

Но, сохраняя модульность и разделение кода, вы можете иметь несколько сервлетов.

1 голос
/ 15 октября 2008

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

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

0 голосов
/ 15 октября 2008

Я уверен, что вы знаете, что у вас может быть несколько экземпляров одного и того же сервлета, если вы зарегистрируете разные узлы в файле web.xml для своего приложения - то есть, если вы хотите это сделать.

Кроме того, насколько я понимаю, вы могли бы извлечь выгоду из кометной архитектуры - http://en.wikipedia.org/wiki/Comet_(programming).
Уже есть несколько реализаций Comet для некоторых контейнеров сервлетов - вот один взгляд на то, как использовать Ajax и Comet - http://www.ibm.com/developerworks/java/library/j-jettydwr/. Вы должны изучить, прежде чем принять решение о своей архитектуре.

BR
~ A

0 голосов
/ 15 октября 2008

Как сказал Тони, на самом деле нет причин использовать более одного сервлета, если только вам не нужно разбить сложный класс сервлетов Java или, возможно, реализовать перехватывающий фильтр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...