2014-01-27 4 views
3

Я хочу написать Java-сервер может использовать Netty или что-то еще предлагаемое. Вся цель состоит в том, что я хочу временно направить входящий HTTP-запрос, потому что системы, на которые я нацеливаюсь, выполняют Super Memory и вычисляют интенсивные задачи, поэтому, если они обременены большой нагрузкой, в конечном итоге они, как правило, разбиваются.Написание java-сервера для очередности входящего HTTP-запроса и обработки их через некоторое время?

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

Можно ли это сделать с помощью Netty в Java, я также открыт для реализации в Scala, Python или clojure.

ответ

5

Я сделал что-то подобное с актерами Scala Akka. Вместо HTTP-запроса у меня появилось неограниченное количество запросов на работу и добавление в очередь (обычная очередь). Менеджер рабочего стола будет управлять этой очередью и диспетчерской работой для участников-работников, когда они будут обрабатывать предыдущие задачи. Рабочие уведомили бы менеджера-менеджера о том, что задача завершена, и она отправит им новую из очереди. Таким образом, в этом случае нет оживленного ожидания или цикла, все происходит при приеме сообщений. Вы можете сделать то же самое с вашими запросами HTTP. Akka можно использовать из Scala или Java, и описанный мной процесс проще реализовать, чем звучит.

В качестве веб-сервера вы можете использовать что-либо действительно. Это может быть Jetty, или какой-то сервлет-контейнер, такой как Tomcat, или даже Spray-can. Все, что нужно сделать, - это получить запрос и отправить сообщение менеджеру рабочего. Вся система будет асинхронной и неблокирующей.