Какие актерские веб-фреймворки доступны для Scala? - PullRequest
7 голосов
/ 17 ноября 2010

Мне нужно создать очень параллельный веб-сервис, который будет предоставлять API на основе REST для JavaScript (внешний интерфейс) и Rails (внутренний интерфейс).Веб-сервис будет подходить API доступа к данным для MongoDB.

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

Поэтому я ищу веб-фреймворк, явно созданный с использованием Actors, для поддержки массовой загрузки запросов. Я очень новичок в Scala иЯ не совсем понимаю, как Actor может работать, если почти все фреймворки для Scala основаны на Java-сервлетах, которые создают поток при каждом запросе, который просто исчерпывает все ресурсы в моем сценарии.

Ответы [ 4 ]

3 голосов
/ 18 ноября 2010
  1. Если вы действительно хотите иметь активные соединения длиной более 10 КБ, тогда любой стандартный сервер / среда Java-приложений (возможно, кроме Netty) не будет работать для вас - все они потребляют много память (даже если используется какой-либо умный NIO). Вам лучше придерживаться кластерного решения, основанного на цикле событий (например, node.js, который вы уже пробовали), монгрел, поддерживаемый zeroMQ, nginx с режимом записи в MQ, опрошенный Scala Actors, и т. Д.

  2. Среди фреймворков Scala / Java Lift имеет хорошую асинхронную поддержку REST (хотя он не связан напрямую с актерами). OTOH, LinkedIn использует актеров Scalatra + stdlib для своих REST-сервисов за Signal, и чувствует себя прекрасно.

1 голос
/ 23 апреля 2011

Что касается самой Скалатры, они работают над новым запросом. абстракция под названием SSGI (сродни слою Servlet / Rack / WSGI / WAI), что, по их словам, должно облагодетельствовать их, чтобы они перестали работать как Servlet, а также запустить поверх чего-то построенного с Netty. Смотрите тему здесь . http://github.com/scalatra/ssgi

Есть несколько других интересных структур на уровне простоты Scalatra, поскольку они изначально создавались для поддержки асинхронных веб-сервисов (не связывают поток при запросе):

https://github.com/jdegoes/blueeyes - не сервлет; построен на нетти. ("слабо вдохновленный ... Скалатрой")

http://spray.cc/ - Построен на актерах Akka, Akka Mist. Servlet 3.0 или продолжение Jetty («Спрей был сильно вдохновлен BlueEyes и Scalatra.»)

И на более низком уровне: https://github.com/rschildmeijer/loft - «Неблокирующее асинхронное однопоточное полотно на основе продолжения» сервер «. Не готовый к производству, но довольно интересный. Для продолжения требуется плагин компилятора.

1 голос
/ 18 ноября 2010

Другой вариант - Play framework . Последний выпуск 1.1 поддерживает Scala. Он также поддерживает akka как модуль.

0 голосов
/ 17 ноября 2010

http://liftweb.net/ Действительно, запрос начинается как сервлет, но затем лифт использует поддержку комет, найденную во многих контейнерах сервлетов, чтобы отделиться от потока, сохраняя контекст запроса (который контейнер затем не разрушает.) который затем может быть использован для вывода данных в актерах.

http://akkasource.org также поддерживает отдых, но блокирует поток до тех пор, пока актер не завершит свою работу

...