近日,来自 LinkedIn 的首席软件工程师 Yevgeniy Brikman 发表了一篇文章,谈到了他对 Java Web 框架——Play Framework 的评价与看法。
Play 最吸引我眼球的是对异步编程的支持,这有助于并行地从多种后端服务器中获取数据并且支持 comet 风格的交互。
Play 旨在处理响应时间不定的极短请求。Play 可以临时“挂起”处于连接状态的 HTTP 请求。这样在处理等待时就可以将所需的资源降到最低限度,特别地,Play 使用了一个微型的线程池(通常数量为机器上的处理器个数加上 1)。这与现在大行其道的“一个请求一个线程”有着很大的差别。
根据服务器负载的不同,其事件处理方式所支持的并发数要比线程模型多很多;对于 comet 中的持续连接来说,该事件模型是唯一可行的方式。
Play 提供了几个模型来异步处理请求。你可以定义“Promise”值(它可以纳入到“waitall”语句中),在这种情况下,直到所有请求都已返回后执行才会继续,这对于从多个 Web API 中获取数据的情况来说是非常便捷的。Play 还通过 Java 匿名内部类来支持回调模型。此外,你还可以通过 Play 设定一个固定的时间,只有在这个时间后才会处理请求。
Play 的社区非常活跃,大家热火朝天的工作就是最好的宣传,Play 确实做到了 DRY(Don’t Repeat Yourself),并且对异步 I/O 的支持也被认为是 JVM 世界中做得最好的。当然了,Play 的文档 /JavaDoc 还需要改进,但我们会进一步评估 Play,看看它是否适合于 LinkedIn 的生态系统。
随着(移动)复合应用与 Web API 的日渐兴起,介于(移动)客户端与 Web API 之间薄薄的一层复合中间层逐渐涌现出来。Play 或是 Node.js 这样的框架是否会成为移动解决方案架构的关键呢?你对此有何看法?
评论