首页 文章

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

提问于
浏览
7

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

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

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

4 回答

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

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

  • 0

    另一种选择是Play framework . 最新的1.1版本支持Scala . 它还支持akka作为模块 .

  • 3

    就Scalatra本身而言,他们一直致力于一种名为SSGI的新请求抽象(类似于Servlet / Rack / WSGI / WAI层),他们认为这应该让他们不能仅仅作为Servlet运行而且还可以运行在顶层用Netty构建的东西 . 见线程here . http://github.com/scalatra/ssgi

    Scalatra简洁级别还有其他一些有趣的框架,因为它们从一开始就设计为支持异步Web服务(不会为每个请求绑定一个线程):

    https://github.com/jdegoes/blueeyes - 不是servlet; Build 在Netty上 . ("loosely inspired by ... Scalatra")

    http://spray.cc/ - Build 在Akka演员身上,Akka Mist . Servlet 3.0或Jetty延续("spray was heavily inspired by BlueEyes and Scalatra.")

    在较低的水平:https://github.com/rschildmeijer/loft - "Continuation based non-blocking, asynchronous, single threaded web server."不是 生产环境 准备好,而是看起来很有趣 . Continuations需要编译器插件 .

  • 1

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

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

相关问题