什么基于actor的Web框架可用于Scala?

时间:2010-11-17 20:50:04

标签: scala frameworks actor

我需要构建非常并发的Web服务,它将为JavaScript(前端)和Rails(后端)公开基于REST的API。 Web服务将适合MongoDB的数据访问API。

我已经使用NodeJS编写了一个初始实现,并希望尝试基于Scala的解决方案。我也在考虑Erlang,每个Web框架都是基于actor的。

所以我正在寻找使用Actors显式构建的Web框架,以支持大量的请求,我对Scala来说是新手,如果几乎所有Scala的框架都基于,我不太明白Actor是如何工作的Java servlet,它在每个请求上创建一个线程,这将耗尽我场景中的所有资源。

4 个答案:

答案 0 :(得分:3)

  1. 如果你真的要一次拥有10k +长的活动连接,那么任何标准的Java应用服务器/框架(可能,除了Netty)都不适合你 - 所有这些都消耗了大量的内存(即使使用任何类型的智能NIO)。您最好坚持使用基于集群事件循环的解决方案(比如您已经尝试过的node.js),mongrel支持zeroMQ,nginx使用写入由Scala Actors轮询的MQ的模式等。

  2. 在Scala / Java框架中,Lift对REST具有良好的异步支持(尽管它不直接与actor绑定)。 OTOH,LinkedIn使用Scalatra + stdlib actor作为他们在Signal后面的REST服务,感觉很好。

答案 1 :(得分:1)

另一个选项是Play framework。最新的1.1版本支持Scala。它还支持akka作为模块。

答案 2 :(得分:1)

就Scalatra本身而言,他们一直致力于新的请求 抽象称为SSGI(类似于Servlet / Rack / WSGI / WAI层), 他们说他们应该让他们从完全独立运作中脱离出来 Servlet,也运行在使用Netty构建的东西之上。见线程herehttp://github.com/scalatra/ssgi

Scalatra的简洁程度还有一些其他有趣的框架,因为它们是从头开始设计的,以支持异步Web服务(不会为每个请求占用一个线程):

https://github.com/jdegoes/blueeyes - 不是servlet;建立在Netty上。 (“松散的灵感来自... Scalatra”)

http://spray.cc/ - 建立在Akka演员身上,Akka Mist。 Servlet 3.0或Jetty延续 (“喷雾深受BlueEyes和Scalatra的启发。”)

在较低的水平: https://github.com/rschildmeijer/loft - “基于连续的非阻塞,异步,单线程Web 服务器。” 不是生产准备,而是有趣的。 Continuations需要编译器插件。

答案 3 :(得分:0)

http://liftweb.net/实际上,请求以servlet开始,但是然后lift使用许多servlet容器中的comet支持来脱离线程,保留请求上下文(容器不会销毁)然后可以用于在演员中输出数据。

http://akkasource.org也支持休息,但它会阻止线程直到演员完成其工作