我在 Play 2 App 中实现了一个 API 服务,目前该 api 在 5 个服务器上每秒处理 5-7000 个请求。我最近对 Spray.IO 和 Play2 进行了基准测试,发现简单 http 请求的性能几乎提高了 3 倍。
我宁愿不重新实现 Spray 中的所有内容,而是我可以以某种方式将 Spray HTTP 服务器嵌入到我的 Play 应用程序中,而不是使用它来服务器 http 请求。
这可能吗?有没有这样的例子?
我在 Play 2 App 中实现了一个 API 服务,目前该 api 在 5 个服务器上每秒处理 5-7000 个请求。我最近对 Spray.IO 和 Play2 进行了基准测试,发现简单 http 请求的性能几乎提高了 3 倍。
我宁愿不重新实现 Spray 中的所有内容,而是我可以以某种方式将 Spray HTTP 服务器嵌入到我的 Play 应用程序中,而不是使用它来服务器 http 请求。
这可能吗?有没有这样的例子?
我可以说 Spray 实际上是最快的基于 JVM 的 Web 开发工具包,你可以在官方博客上查看最新的基准测试。
至于问题。如果你想为一个小型 HTTP 服务器编写自己的实现,那么你应该检查spray-can http based api,spray-io 只是 Akka IO 和 Java NIO 之间的一个层。我不太擅长 Play,但作为一种方式,我建议使用 Spray http 服务器创建一个多构建 sbt 配置或单独的项目,并通过 REST api 连接它们。
架构将非常简单,因为它基于 Akka 演员,在最简单的情况下看起来就像接收方法中的一堆情况:
def receive = {
case HttpRequest(GET, Uri.Path("/ping"), _, _, _) =>
sender ! HttpResponse(entity = "PONG")
}
在 Play 方面,您应该使用 Akka 或 Play 的路由文件来描述路由。
另请查看 Spray routing api。它更容易实现和使用,看起来非常类似于 Spray 可以为您提供的route
文件,但更灵活和可读。
Spray 在他们的 Github repo上有很多非常详细的例子:spray-can和spray-routing。
BTW Spray 团队还为前端提供了 Play 模板引擎,并将其称为Twirl,因此将您的应用程序移植到 Spray 不会花费太多时间
我们看到 Play 在全栈框架中表现良好:
http://www.techempower.com/benchmarks/#section=data-r6&hw=i7&test=db&c=1&d=2&a=1
我们看到在开发人员生产力方面存在权衡,即您想走得越快,您的开发人员通常的生产力就越低。您需要知道 Play 是否会达到您的应用程序所需的性能。
顺便说一句,我们一直专注并继续专注于提高 Play 的性能。
我希望这个对你有用。
实际上,The Play 框架很快就会将 Spray I/O用于它的 http 服务器。所以看起来你将能够两全其美!