Scala中间件select有什么区别?
注意: 不幸的是,这个问题已经closures了,但是我试图保持它,如果有其他人同时提出了同样的问题。
我一直在寻找一个很好的解决scheme来开发一个位于移动设备和现有Web服务之间的Scala服务。
目前可行的选项列表如下:
- 欺骗
- 喷雾
- 蓝眼睛
- 阿卡
- Play2 Mini
- 未经过滤
- 电梯
- 抽烟
- 了Scalatra
那里可能有更多的select。 如何决定使用哪一个? 什么是一个好的Scala中间件select的特点(原谅双关语 – )。 一方面,我想去Akka,因为它是TypeSafe Scala栈的一部分,但是另一方面,像Finagle这样的库有一套丰富的库,使pipe道工程变得如此简单。 喷雾看起来不错,使用简单。
任何build议,见解或经验将不胜感激。 我相信有人在那里一定有一些他们不会介意分享的经验。
更新:
我很想重新打开这个问题。 这个问题的一个很好的答案将帮助新的Scalateers避免相关的陷阱。
更新2:
这是我自问这个问题后的经历:
Finagle – 我使用Finagle进行一个项目,它坚如磐石。
喷雾 – 在我最近的项目中,我使用喷雾,我非常高兴。 最新版本build立在Akka 2上,您可以使用Spray-can库直接运行,无需使用Web服务器。 喷雾是一套库,而不是一个框架,是非常模块化的。 学习喷雾:Akkavideo中的REST提供了一个很好的概述, Cakesolutions的这个博客展示了一个非常好的开发方法和架构。
更新3:
生活移动得很快。 如果你偶尔停下来看看,你可能会想念它。 – Ferris Bueller
现在select变得更简单了。 在我的愚见中,斯普雷赢得了这场战斗。 它被整合到Akka成为下一个Akka HTTP。 我现在已经在多个项目上使用Spray,可以诚实地说,这是我遇到过的梦幻般和最好的支持软件。
这并没有回答最初的问题,但至less给了一些迹象说明为什么Spray在大多数情况下似乎是最好的select。 它非常灵活,非阻塞,非常稳定。 它有客户端和服务器端的库以及一个很好的testing工具。 另外,看看这些统计数据来获得性能的一个主意: Web框架基准
我个人很早就开始喷雾,并尝试了Scala的其他一切。 虽然Scala,spray,akka,shapeless和scalaz肯定有一点点的学习曲线,但是一旦你开始深入研究并真正学习如何使用这些技术,它们是有意义的,我立刻就看到了这种好处我正在做的工作。
就我个人而言,我认为没有什么可以为build立服务器,restapis,http客户端,以及任何你想要的东西而喷射。 我喜欢喷雾的是,他们用心灵搭配阿卡。 我刚开始使用它时可能是一个非常早期的项目,但是架构是有意义的。 那些家伙知道他们在利用演员模型的好处,而没有任何阻止操作。
虽然演员可能会习惯一些,但我确实喜欢他们。 他们使我的系统具有很高的可扩展性和低廉的运行成本,因为我不需要像以前那样强大的硬件。 此外,喷雾具有喷雾路由的DSL,所以只要遵循规则…就不会阻塞。 这当然意味着不要去apache公共的http客户端,从api或演员提出客户端请求,因为你会回到阻塞模型。
到目前为止,我非常喜欢喷雾,安全和阿卡。 他们的模型自然而然地构build了一个非常有弹性的系统,如果有什么事情发生的话,它们会自行恢复,并采取快速失败的方法。 我用喷的牛肉(而不是喷雾的错误)是路由DSL的该死的IDE支持。 我绝对鄙视Eclipse,一直是IDEA用户。 当我开始使用Scala插件时,一切都好了。 然后我的路由dsl自然演变成更大的怪兽。 关于IDEA分析代码的方式,在任何遇到任何喷射路由或不成形的情况下,都会使其裤子变短。 这是它无法使用的地步(我input2-3个字母,必须等待5分钟才能重新获得控制权)。
所以,对于任何喷射路由或沉重的不成形的代码,我用ensime,ensime-sbt和scala-mode2来启动emacs。 现在,如果我只能得到一个质量为astyanax的Cassandra库,并且使用更多的非阻塞体系结构。
在这里你可以find一个很好的scala资源列表,并列出你所有的select。
根据我自己的经验,我使用Scalatra,对于uri映射和调用Web服务这样的事情来说,它是微小的,简单而有效的。