64

注意: 不幸的是,这个问题已关闭,但我正在努力维护它,以防其他人提出同样的问题。

我一直在寻找一个很好的解决方案来在 Scala 中开发一种介于移动设备和现有 Web 服务之间的服务。

当前可行的选项列表是:

那里可能有更多选择。一个人如何决定使用哪一个?一个好的 Scala 中间件选择的特点是什么(请原谅双关语;-)。一方面,我想选择 Akka,因为它是 TypeSafe Scala 堆栈的一部分,但另一方面,像 Finagle 这样的东西具有丰富的库集,并且使管道变得如此简单。喷雾看起来不错且易于使用。

任何建议、见解或经验将不胜感激。我敢肯定,外面的人一定对其中一些有一些经验,他们不会介意分享。

更新:

我希望重新提出这个问题。对这个问题的一个好的回答将帮助新的 Scalateers 避免相关的陷阱。

更新 2:

这些是我提出这个问题后的亲身经历:

Finagle - 我在一个项目中使用了 Finagle,它坚如磐石。

Spray - 在我的最新项目中,我正在使用 Spray,我非常高兴。最新版本是基于 Akka 2 构建的,您可以直接使用 Spray-can 库运行它,从而无需 Web 服务器。Spray 是一组库,而不是一个框架,并且非常模块化。Learn about Spray: REST on Akka 视频提供了一个很好的概述,Cakesolutions 上的这个博客展示了一个非常好的开发方法和架构。

更新 3:

生活节奏很快。如果你不时不时停下来看看周围,你可能会错过它。-费里斯·布勒

这些天来,选择变得更简单了。在我看来,Spray 赢得了这场战斗。它正在被集成到 Akka中,成为下一个 Akka HTTP。我现在已经在多个项目中使用 Spray,老实说,它是我遇到过的最棒且支持最好的软件。

这并不能回答最初的问题,但至少可以说明为什么在大多数情况下 Spray 似乎是最佳选择。它非常灵活、无阻塞且非常稳定。它有客户端和服务器端的库和一个很棒的测试工具包。此外,查看这些统计数据以了解性能:Web 框架基准

4

2 回答 2

2

我个人很久以前就开始使用 spray 并尝试了 Scala 的所有其他功能。虽然 Scala、spray、akka、shapeless 和 scalaz 肯定有一些学习曲线,但一旦你开始深入研究并真正学习应该如何使用这些技术,它们就很有意义,我立即看到了这些技术的好处我现在正在做的工作。

就我个人而言,我认为构建服务器、rest api、http 客户端和其他任何你想要的东西都没有什么能真正经得起喷。我喜欢喷雾的原因是他们在构建时考虑到了 akka。当我第一次开始使用它时,它可能是一个非常早期的项目,但架构是有意义的。那些人知道他们在利用演员模型的好处和没有任何阻塞操作方面做了什么。

虽然演员可能需要一点时间来适应,但我确实喜欢他们。它们使我的系统非常可扩展且运行成本低廉,因为我不需要像过去那样强大的硬件。另外,spray 具有喷雾路由 DSL,因此只要您遵守规则,制作一个 rest api 就相对简单......不要阻塞。这当然意味着不要去拉入 apache commons http 客户端来从 api 或参与者发出客户端请求,因为您将回到阻塞模型。

到目前为止,我对 spray、typesafe 和 akka 感到非常满意。他们的模型很自然地有助于构建非常有弹性的系统,如果发生任何事情并且您采取快速失败的方法,这些系统会自行恢复。我对 Spray 的不满(这不是 Spray 的错)是该死的 IDE 对路由 DSL 的支持。我绝对鄙视Eclipse,一直是IDEA用户。当我开始使用 Scala 插件时,一切似乎都很好。然后我的路由 dsl 自然演变成更大的野兽。IDEA 解析该代码的方式使其在遇到任何带有喷雾路由或无形的东西时都会大吃一惊。它已经到了无法使用的地步(我输入了 2-3 个字母并且必须等待 5 分钟才能重新获得控制权)。

因此,对于任何喷射路由或繁重的无形代码,我使用 ensime、ensime-sbt 和 scala-mode2 启动 emacs。现在,如果我只能获得一个具有 astyanax 质量的 Cassandra 库并使用更非阻塞的架构构建。

于 2014-06-24T07:08:13.377 回答
0

在这里,您可以找到一份很棒的 scala 资源列表,其中简要说明了您列出的所有替代方案。

根据我自己的经验,我使用 Scalatra,它对于 uri 映射和调用 Web 服务之类的事情来说非常小巧、简单且有效。

于 2014-07-21T21:03:25.673 回答