我在Play 2应用程序中实现了API服务,目前api在5台服务器上处理每秒5-7000个请求。我最近对Spray.IO和Play2进行了基准测试,并且在简单的http请求上看到了近3倍的性能。
我宁愿不在Spray中重新实现所有内容,如果相反我可以以某种方式在我的Play应用程序中嵌入喷雾HTTP服务器,而不是使用它来服务器http请求。
这可能吗?那有什么例子吗?
答案 0 :(得分:1)
我可以说Spray实际上 是基于Web的开发最快的基于JVM的工具包,您可以查看官方blog上的最新基准测试。
至于问题。如果你想为一个小的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不会花费太多时间
答案 1 :(得分:1)
我们发现Play对于完整的堆栈框架来说效率很高:
http://www.techempower.com/benchmarks/#section=data-r6&hw=i7&test=db&c=1&d=2&a=1
我们发现在开发人员的工作效率方面存在权衡,即您想要的速度越快,开发人员的工作效率就越低。您需要知道Play是否会达到您的应用程序所需的性能。
顺便说一句,我们一直专注并继续专注于提高Play的表现。
我希望这会有所帮助。
答案 2 :(得分:1)
实际上,Play框架will soon be using Spray I/O为它的http服务器。 所以看起来你将能够拥有两全其美!