据我了解,为了使应用程序真正无阻塞,所有执行IO的库(例如数据库驱动程序)都应该意识到它们在select
循环内运行并且应该添加它们的文件描述符到主列表,以便他们的IO可以正确安排。因此,如果我使用随机驱动程序(比如https://github.com/mauricio/postgresql-async),它将阻止其他客户端在等待查询完成时的所有HTTP处理。我是否应该使用某些特定的Play(或其引擎盖下的任何内容)知道驱动程序?
答案 0 :(得分:1)
我不知道实施细节,但根据此博客文章,它至少适用于一个人:
我认为Future实例虽然对应用程序不透明,但当它告诉系统等待套接字和期货的集合时,会将文件描述符移交给runloop中的select()调用。
答案 1 :(得分:-1)
将数据库查询抛出到后台线程, 并返回承诺:
http://www.playframework.com/documentation/2.0/ScalaAsync
Scala 2.10集成了Akka的期货实施:
http://doc.akka.io/docs/akka/2.2.1/scala/futures.html#introduction
免责声明 - 我从未使用Play ...