2008-10-15 4 views
4

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

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

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

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

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

Или:

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

ответ

11

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

+0

Спасибо, я никогда не был совершенно ясно, о том, что именно произошло на низком уровне для сервлетов. – 2008-10-15 12:16:56

2

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

0

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

+0

1. Вы должны редко добавлять атрибуты ServletContext, если вообще когда-либо. 2. Можете ли вы поддержать это: «Несколько сервлетов - это, безусловно, способ пойти на сырую скорость»?это просто неверно. Если вам нужно что-то синхронизировать, вам нужно будет синхронизировать, есть ли у вас 1 или 100 сервлетов – 2008-10-15 03:29:50

+0

1. Просто говорю, что ServletContext не является потокобезопасным и ничего не говорит о хорошей практике. 2. Вы абсолютно правы в этом, мозг пердит с моей стороны, и я изменю свой ответ. Я думал, что мы можем немного блокировать поток несколькими сервлетами. Моя вина. – 2008-10-15 03:57:16

1

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

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

1

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

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

0

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

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

BR,
~ A

Смежные вопросы