2009-07-16 2 views
7

Следуя за this question Я нахожусь в фазе поиска правильного контейнера HTTP для одного из моих проектов. Я просмотрел несколько контейнеров, но я все еще не уверен, какой из них лучше всего подходит для запросов AJAX с высокой нагрузкой. Apache Mina выглядит довольно многообещающим, но относительно сложным. Реализация асинхронного веб-сервера под названием AsyncWeb, похоже, была объединена с Mina, но я не мог найти никакого отношения к ее производству. В другом вопросе я рекомендовал сервер Simple HTTP, который мне очень нравится, потому что он ... прост, понятен и чист, но я до сих пор не знаю, соответствует ли это цели.Быстрый NIO, асинхронный HTTP-сервер для Java

Кроме того, я не уверен, на котором обработка запросов концепции выбора:

  1. Создать диспетчерскую тему для каждого входящего соединения (оптимизация может, конечно, включать пул потоков и очереди диспетчеризации), то есть выполняя всю работу. Преимущество, вероятно, в том, что мне не приходится иметь дело с такими проблемами синхронизации, но это, вероятно, значительно снизит пропускную способность на высоких нагрузках.

  2. Потому что это будет очень модульное приложение «конвейерная обработка» (возможно, более подходящий термин, я думаю;) подход может работать также: создать фиксированное количество потоков, для каждой задачи. . один для обработки запроса -> один для десериализации заголовка (если я получаю входные данные в разных форматах, таких как вычитаемые HTML-формы, XML-RPC, JSON и т. д.) -> один для «диспетчера диспетчеризации» (делая все, что я хочу делать с этими данными) -> и один для сериализации вывода в нужном формате (JSON, XML, HTML и т. д.) и переместить каждый запрос через эти уровни до тех пор, пока он не будет завершен. Наверное, сложнее реализовать, но у меня есть фиксированное количество потоков (число может также зависеть от аппаратного обеспечения) и чистое разделение проблем.

Любые впечатления от любой Рамочной основы, которая может подойти, и двух разных подходов к обработке?

+0

взглянуть на deftserver.org (молодой проект и в настоящее время не производство готово, отказ от ответственности: им ловкий коммиттера) – Schildmeijer

ответ

3

В репозитории subversion Simple HTTP приведен пример.

http://simpleweb.svn.sourceforge.net/viewvc/simpleweb/trunk/src/demo/java/org/simpleframework/example/javafx/

Он демонстрирует рыночные данные в реальном времени с помощью кометы, и только одна нить диспетчерскую обновления любого количества клиентов. Простой имеет прозрачный транспортный уровень, который обеспечивает блокировку семантики ввода-вывода с преимуществом асинхронной отправки с NIO, основанной на фиксированных очередях ByteBuffer для каждого подключенного клиента. Таким образом, вы получаете гладкий прозрачный выход NIO с предсказуемым потреблением памяти.Кроме того, измерения производительности на таких серверах, как Jetty, показывают улучшение производительности x2.

http://simpleweb.svn.sourceforge.net/viewvc/simpleweb/trunk/application/Plotter/ApacheBench/ScalabilityApacheBench.png?revision=1448

+0

Спасибо за ссылку. Я посмотрю на это. Из-за моего собственного позитивного опыта в рамках Рамочной основы я бы, как правило, использовал его. – Daff

7

Вы можете посмотреть на Jetty и, в частности, Hightide

Hightide предварительно сконфигурированный с внедренным Ajax связи библиотек, такие как DWR, ActiveMQ-Web (JMS в браузер) и протокол Bayeux (также известный как cometd). Развертывание приложений на Hightide означает, что она будет масштабироваться гладко благодаря сочетанию интеллектуального слоя IO Jetty и продолжений механизм

В частности, много работы было вложено, чтобы оптимизировать Jetty для AJAX. См. this blog entry для получения более подробной информации.

+0

Спасибо, что звучит хорошо, тоже. Я поставлю Jetty в свой оценочный список. – Daff

+0

Интересно, что кто-то не согласился с вами и по каким-то причинам отказался. Почему, я не знаю ... –

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