2013-10-21 70 views
2

據我所知,爲了使應用程序真正無阻塞,所有執行IO操作的庫(例如數據庫驅動程序)都應該意識到它們在select循環內部運行並應該將他們的文件描述符添加到主列表中,以便他們的IO可以正確調度。因此,如果我使用隨機驅動程序(如https://github.com/mauricio/postgresql-async),它將阻止其他客戶端的所有HTTP處理,同時等待查詢完成。我是否應該使用某些特定的Play(或其他底層的)知道的驅動程序?用於Play框架的非阻塞數據庫驅動程序

+0

如果它是非阻塞客戶端,它爲什麼會阻塞任何東西? –

回答

-1

要把你的數據庫查詢到後臺線程, 並返回一個承諾玩:

http://www.playframework.com/documentation/2.0/ScalaAsync 

斯卡拉2.10集成了阿卡的期貨實現:

http://doc.akka.io/docs/akka/2.2.1/scala/futures.html#introduction 

免責聲明 - 我從來沒有使用播放...

+0

多路複用服務器的整體思想是,你只需要一個線程同時處理多個請求。 – synapse

+0

這就是應該如何處理「後臺線程」作爲參與者。以http://reactivemongo.org/爲例。如果驅動程序以某種方式阻止,則應將其自動包裝到承諾和期貨中。 – Rajish

+2

在另一個線程上拋出您的查詢是* not *非阻塞。它僅僅阻塞另一個線程。 – nilskp

相關問題